SQL – veel op veel relatie

In het verlengde van het artikel Access – relaties volgt helemaal onderaan de complete SQL-instructie voor het aanmaken van de tabellen, relaties en rijen.

Wanneer deze SQL-instructie succesvol is geïmporteerd en uitgevoerd kan met behulp van de volgende SQL-instructie de resultaten van de rechter afbeelding worden gegenereerd.

SELECT B.bed_naam, B.bed_adres, B.bed_postcode, M.med_naam, M.med_tel
FROM Bedrijven as B, Medewerkers as M, Bedrijf_Medewerker as BM
WHERE B.bed_id = BM.bed_id AND M.med_id = BM.med_id;

Zoals in de bovenstaande afbeelding is af te lezen zijn er twee bedrijven en vijf medewerkers. Eén bedrijf kent meerdere medewerkers en één medewerker kan bij meerdere bedrijven werken, zie medewerker 3. In dit geval is er dus sprake van een veel op veel relatie.

sql_relaties_1-op-veel
In de bovenstaande afbeelding worden de relaties nog eens gevisualiseerd. Met behulp van de koppeltabel [Bedrijf_Medewerker] komt de veel-op-veel relatie tot stand tussen de tabellen [Bedrijven] en [Medewerkers].

-- -------------------------------------------
-- MS SQL Server 2014
-- pascalterheege.nl
-- tabellen aanmaken
-- -------------------------------------------
 
CREATE TABLE Bedrijven
(
  bed_id        char(10)  NOT NULL ,
  bed_naam      char(50)  NOT NULL ,
  bed_adres     char(50)  NULL,
  bed_postcode  char(50)  NULL  
);
 
 
CREATE TABLE Medewerkers
(
  med_id        char(10)    NOT NULL,
  med_naam      char(50)    NOT NULL, 
  med_tel       char(50)    NULL
);
 
CREATE TABLE Bedrijf_Medewerker
(
  bed_id        char(10)    NOT NULL,
  med_id        char(10)    NOT NULL
);
 
-- -------------------------------------------
-- Definities primary keys (2x)
-- -------------------------------------------
ALTER TABLE Bedrijven 
ADD PRIMARY KEY (bed_id);
 
ALTER TABLE Medewerkers 
ADD PRIMARY KEY (med_id);
 
-- -------------------------------------------
-- Definities foreign keys (2x)
-- -------------------------------------------
ALTER TABLE Bedrijf_Medewerker 
ADD CONSTRAINT Fk_Medewerkers_Bedrijven 
FOREIGN KEY (bed_id) 
REFERENCES Bedrijven (bed_id);
 
ALTER TABLE Bedrijf_Medewerker 
ADD CONSTRAINT Fk_Bedrijven_Medewerkers 
FOREIGN KEY (med_id) 
REFERENCES Medewerkers (med_id);
 
-- -------------------------------------------
-- Tabel bedrijven vullen
-- -------------------------------------------
INSERT INTO Bedrijven
VALUES(1, 'Omval IT', 'Gebroeders Ganslaan 33', '5626 GA');
 
INSERT INTO Bedrijven
VALUES(2, 'Backslash IT', 'Julianaplein 52', '2771 EE');
 
-- -------------------------------------------
-- Tabel medewerkers vullen
-- -------------------------------------------
 
INSERT INTO Medewerkers
VALUES(1, 'Steffen van Hattum', '06-97209103');
 
INSERT INTO Medewerkers
VALUES(2, 'Annelise Tuin', '06-55104337');
 
INSERT INTO Medewerkers
VALUES(3, 'Gertruida Dekkers', '06-18494231');
 
INSERT INTO Medewerkers
VALUES(4, 'Elien Schäfer', '06-49496288');
 
INSERT INTO Medewerkers
VALUES(5, 'Siemon Smit', '06-12351658');
 
-- -------------------------------------------
-- Tabel bedrijf_medewerker vullen
-- -------------------------------------------
 
INSERT INTO bedrijf_medewerker 
VALUES(1, 1);
 
INSERT INTO bedrijf_medewerker 
VALUES(1, 2);
 
INSERT INTO bedrijf_medewerker 
VALUES(1, 3);
 
INSERT INTO bedrijf_medewerker 
VALUES(2, 3);
 
INSERT INTO bedrijf_medewerker 
VALUES(2, 4);
 
INSERT INTO bedrijf_medewerker 
VALUES(2, 5);