sql >> Database >  >> RDS >> Database

Meerdere (3+) tabellen samenvoegen in één verklaring

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.


  1. Ik ben het wachtwoord vergeten dat ik tijdens de installatie van postgre heb ingevoerd

  2. Voordelen van het gebruik van Microsoft Access-sjablonen

  3. Blobs invoegen in MySql-databases met php

  4. Een Oracle-database migreren van AWS EC2 naar AWS RDS, deel 4