SQL – 1 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
WHERE B.bed_id = M.bed_id;

Zoals in de bovenstaande afbeelding is af te lezen zijn er twee bedrijven en zes medewerkers. Eén bedrijf kent meerdere medewerkers, maar één medewerker kent maar één bedrijf. In dit geval is er dus sprake van een 1 op veel relatie.

In de linker afbeelding worden de relaties nog eens gevisualiseerd. Vanuit de tabel [Bedrijven] (1) volgt een relatie met de tabel [Medewerkers] (veel). De 1-relatie bevindt zich bij de zogeheten primary key bed_id ([Bedrijven]) en de veel-relatie bij de zogeheten foreign key bed_id ([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, 
  bed_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 (1x)
-- -------------------------------------------
ALTER TABLE Medewerkers 
ADD CONSTRAINT Fk_Medewerkers_Bedrijven 
FOREIGN KEY (bed_id) 
REFERENCES Bedrijven (bed_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',1);
 
INSERT INTO Medewerkers
Values(2, 'Annelise Tuin', '06-55104337',1);
 
INSERT INTO Medewerkers
Values(3, 'Gertruida Dekkers', '06-18494231',1);
 
INSERT INTO Medewerkers
Values(4, 'Rense Boskamp', '06-14687915',2);
 
INSERT INTO Medewerkers
Values(5, 'Elien Schäfer', '06-49496288',2);
 
INSERT INTO Medewerkers
Values(6, 'Siemon Smit', '06-12351658',2);