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.

1SELECT B.bed_naam, B.bed_adres, B.bed_postcode, M.med_naam, M.med_tel
2FROM Bedrijven AS B, Medewerkers AS M
3WHERE 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]).

01-- -------------------------------------------
02-- MS SQL Server 2014
03-- pascalterheege.nl
04-- tabellen aanmaken
05-- -------------------------------------------
06  
07CREATE TABLE Bedrijven
08(
09  bed_id        char(10)  NOT NULL ,
10  bed_naam      char(50)  NOT NULL ,
11  bed_adres     char(50)  NULL,
12  bed_postcode  char(50)  NULL 
13);
14  
15  
16CREATE TABLE Medewerkers
17(
18  med_id        char(10)    NOT NULL,
19  med_naam      char(50)    NOT NULL,
20  med_tel       char(50)    NULL,
21  bed_id        char(10)    NOT NULL
22);
23  
24-- -------------------------------------------
25-- Definities primary keys (2x)
26-- -------------------------------------------
27ALTER TABLE Bedrijven
28ADD PRIMARY KEY (bed_id);
29  
30ALTER TABLE Medewerkers
31ADD PRIMARY KEY (med_id);
32  
33-- -------------------------------------------
34-- Definities foreign keys (1x)
35-- -------------------------------------------
36ALTER TABLE Medewerkers
37ADD CONSTRAINT Fk_Medewerkers_Bedrijven
38FOREIGN KEY (bed_id)
39REFERENCES Bedrijven (bed_id);
40  
41-- -------------------------------------------
42-- Tabel bedrijven vullen
43-- -------------------------------------------
44INSERT INTO Bedrijven
45VALUES(1, 'Omval IT', 'Gebroeders Ganslaan 33', '5626 GA');
46  
47INSERT INTO Bedrijven
48VALUES(2, 'Backslash IT', 'Julianaplein 52', '5251 EE');
49 
50-- -------------------------------------------
51-- Tabel medewerkers vullen
52-- -------------------------------------------
53  
54INSERT INTO Medewerkers
55Values(1, 'Steffen van Hattum', '06-97209103',1);
56  
57INSERT INTO Medewerkers
58Values(2, 'Annelise Tuin', '06-55104337',1);
59  
60INSERT INTO Medewerkers
61Values(3, 'Gertruida Dekkers', '06-18494231',1);
62  
63INSERT INTO Medewerkers
64Values(4, 'Rense Boskamp', '06-14687915',2);
65  
66INSERT INTO Medewerkers
67Values(5, 'Elien Schäfer', '06-49496288',2);
68  
69INSERT INTO Medewerkers
70Values(6, 'Siemon Smit', '06-12351658',2);