Problem:
Du vil gerne kombinere data fra mere end to tabeller med kun én SELECT-sætning.
Eksempel:
Der er fire tabeller i vores database:student
, teacher
, subject
og learning
.
student
tabel indeholder data i følgende kolonner:id
, first_name
og last_name
.
id | fornavn | efternavn |
---|---|---|
1 | Tom | Møller |
2 | John | Forår |
3 | Lisa | Williams |
4 | Ellie | Barker |
5 | James | Moore |
teacher
tabel indeholder data i følgende kolonner:id
, first_name
, last_name
og subject
.
id | fornavn | efternavn |
---|---|---|
1 | Milano | Smith |
2 | Charles | Davis |
3 | Mærk | Moore |
subject
tabel indeholder data i følgende kolonner:id
og name
.
id | navn |
---|---|
1 | Engelsk |
2 | Kunst |
3 | Musik |
Til sidst, learning
tabel indeholder data i følgende kolonner:id
, mark
, subject_id
, student_id
og teacher_id
.
id | marker | emne-id | student_id | teacher_id |
---|---|---|---|---|
1 | 4 | 1 | 2 | 1 |
2 | 5 | 2 | 3 | 2 |
3 | 4 | 3 | 1 | 3 |
4 | 3 | 2 | 1 | 2 |
5 | 2 | 3 | 5 | 3 |
6 | 3 | 3 | 4 | 2 |
Vi vil gerne vide, hvilke elever der studerer engelsk, musik og kunst, samt hvilke lærere der instruerer disse klasser. Vælg faget, efternavnet på den studerende, der tager det pågældende kursus, og efternavnet på den lærer, der leverer det pågældende kursus.
Løsning:
Brug flere JOIN
s i din forespørgsel:
SELECT l.name AS subject_name, t.last_name AS student_last_name, st.last_name AS teacher_last_name FROM learning AS l JOIN subject s ON l.subject_id=s.id JOIN student st ON l.student_id=st.id JOIN teacher t ON l.teacher_id=t.id;
Denne forespørgsel returnerer poster med navn på kursusfaget og efternavne på elever og lærere:
emnenavn | s_efternavn | t_efternavn |
---|---|---|
Musik | Moore | Møller |
Kunst | Davis | Møller |
Engelsk | Smith | Forår |
Kunst | Davis | Williams |
Musik | Davis | Barker |
Musik | Moore | Moore |
Disse data kommer fra tre tabeller, så vi er nødt til at samle alle disse tabeller for at få den information, vi søger.
Diskussion:
Hvis du gerne vil kombinere data gemt i flere (mere end to) tabeller, skal du bruge JOIN
operatør flere gange. Først forbinder du to tabeller, som du plejer (ved hjælp af JOIN
, LEFT JOIN
, RIGHT JOIN
, eller FULL JOIN
, som passende). JOIN
operation opretter en "virtuel tabel", der gemmer kombinerede data fra de to tabeller. I vores eksempel er resultattabellen en kombination af learning
og subject
tabeller.
Det næste trin er at forbinde denne resultattabel med den tredje tabel (i vores eksempel, student
). Dette er ligesom en almindelig JOIN
:du tilslutter dig den "virtuelle tabel" og den tredje tabel med en passende betingelse. Denne betingelse bør generelt omfatte en eller flere kolonner fra den ekstra tabel (student
) og en eller flere kolonner fra den "virtuelle tabel". I vores eksempel refererer vi til student
tabel i den anden JOIN-tilstand.
På dette tidspunkt har vi en ny virtuel tabel med data fra tre tabeller. Det sidste trin er at tilføje data fra den fjerde tabel (i vores eksempel, teacher
). og deltag ved hjælp af nøglen fra disse tabeller (i vores eksempel, id
fra teacher
tabel og teacher_id
fra learning
tabel).
Hvis du skal deltage i et andet bord, kan du bruge en anden JOIN
operatør med en passende betingelse i ON-klausulen. I teorien kan du deltage i så mange borde, du vil.