Probleem:
U wilt gegevens uit meer dan twee tabellen combineren met slechts één SELECT-instructie.
Voorbeeld:
Er zijn vier tabellen in onze database:student
, teacher
, subject
, en learning
.
De student
tabel bevat gegevens in de volgende kolommen:id
, first_name
, en last_name
.
id | voornaam | achternaam |
---|---|---|
1 | Tom | Miller |
2 | Jan | Lente |
3 | Lisa | Willems |
4 | Ellie | Barker |
5 | James | Moore |
De teacher
tabel bevat gegevens in de volgende kolommen:id
, first_name
, last_name
, en subject
.
id | voornaam | achternaam |
---|---|---|
1 | Milaan | Smith |
2 | Charles | Davis |
3 | Markeren | Moore |
Het subject
tabel bevat gegevens in de volgende kolommen:id
en name
.
id | naam |
---|---|
1 | Engels |
2 | Kunst |
3 | Muziek |
Ten slotte, de learning
tabel bevat gegevens in de volgende kolommen:id
, mark
, subject_id
, student_id
, en teacher_id
.
id | markeer | subject_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 |
We willen weten welke studenten Engels, muziek en kunst studeren, en welke docenten deze lessen geven. Selecteer het cursusonderwerp, de achternaam van de student die de cursus volgt en de achternaam van de docent die de cursus geeft.
Oplossing:
Gebruik meerdere JOIN
s in uw zoekopdracht:
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;
Deze zoekopdracht retourneert records met de naam van het cursusonderwerp en de achternaam van de studenten en docenten:
subject_name | s_last_name | t_last_name |
---|---|---|
Muziek | Moore | Miller |
Kunst | Davis | Miller |
Engels | Smith | Lente |
Kunst | Davis | Willems |
Muziek | Davis | Barker |
Muziek | Moore | Moore |
Deze gegevens komen uit drie tabellen, dus we moeten al die tabellen samenvoegen om de informatie te krijgen die we zoeken.
Discussie:
Als u gegevens wilt combineren die zijn opgeslagen in meerdere (meer dan twee) tabellen, moet u de JOIN
gebruiken exploitant meerdere keren. Eerst voeg je twee tabellen samen zoals je normaal zou doen (met behulp van JOIN
, LEFT JOIN
, RIGHT JOIN
, of FULL JOIN
, voor zover van toepassing). De JOIN
operatie creëert een "virtuele tabel" die gecombineerde gegevens uit de twee tabellen opslaat. In ons voorbeeld is de resultatentabel een combinatie van de learning
en subject
tabellen.
De volgende stap is om deze resultatentabel samen te voegen met de derde tabel (in ons voorbeeld student
). Dit is als een gewone JOIN
:u voegt zich bij de “virtuele tafel” en de derde tafel met een passende voorwaarde. Deze voorwaarde moet over het algemeen een of meer kolommen uit de aanvullende tabel bevatten (student
) en een of meer kolommen uit de “virtuele tabel”. In ons voorbeeld verwijzen we naar de student
tabel in de tweede JOIN-voorwaarde.
Op dit moment hebben we een nieuwe virtuele tabel met gegevens uit drie tabellen. De laatste stap is het toevoegen van gegevens uit de vierde tabel (in ons voorbeeld teacher
). en doe mee met de sleutel uit deze tabellen (in ons voorbeeld id
van de teacher
tabel en teacher_id
van de learning
tafel).
Als je aan een andere tafel moet deelnemen, kun je een andere JOIN
gebruiken operator met een geschikte voorwaarde in de ON-clausule. In theorie kun je aan zoveel tafels deelnemen als je wilt.