sql >> Databasteknik >  >> RDS >> Database

Hur man sammanfogar flera (3+) tabeller i ett uttalande

Problem:

Du vill kombinera data från mer än två tabeller med endast en SELECT-sats.

Exempel:

Det finns fyra tabeller i vår databas:student , teacher , subject och learning .

student Tabellen innehåller data i följande kolumner:id , first_name och last_name .

id förnamn efternamn
1 Tom Miller
2 John Vår
3 Lisa Williams
4 Ellie Barker
5 James Moore

teacher Tabellen innehåller data i följande kolumner:id , first_name , last_name och subject .

id förnamn efternamn
1 Milano Smith
2 Charles Davis
3 Markera Moore

subject Tabellen innehåller data i följande kolumner:id och name .

id namn
1 Engelska
2 Konst
3 Musik

Slutligen, learning Tabellen innehåller data i följande kolumner:id , mark , subject_id , student_id och teacher_id .

id markera 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

Vi vill veta vilka elever som studerar engelska, musik och konst, samt vilka lärare som instruerar dessa klasser. Välj kursämne, efternamnet på studenten som går den kursen och efternamnet på läraren som håller kursen.

Lösning:

Använd flera JOIN s i din fråga:

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; 

Denna fråga returnerar poster med namnet på kursämnet och efternamnen på eleverna och lärarna:

ämnesnamn s_last_name t_last_name
Musik Moore Miller
Konst Davis Miller
Engelska Smith Vår
Konst Davis Williams
Musik Davis Barker
Musik Moore Moore

Dessa data kommer från tre tabeller, så vi måste sammanfoga alla dessa tabeller för att få den information vi söker.

Diskussion:

Om du vill kombinera data lagrade i flera (fler än två) tabeller bör du använda JOIN operatör flera gånger. Först sammanfogar du två tabeller som vanligt (med JOIN , LEFT JOIN , RIGHT JOIN , eller FULL JOIN , efter behov). JOIN operation skapar en "virtuell tabell" som lagrar kombinerade data från de två tabellerna. I vårt exempel är resultattabellen en kombination av learning och subject tabeller.

Nästa steg är att koppla den här resultattabellen till den tredje tabellen (i vårt exempel, student ). Det här är som en vanlig JOIN :du går med i den "virtuella tabellen" och den tredje tabellen med ett lämpligt villkor. Detta villkor bör i allmänhet inkludera en eller flera kolumner från tilläggstabellen (student ) och en eller flera kolumner från den "virtuella tabellen". I vårt exempel refererar vi till student tabell i det andra JOIN-villkoret.

Vid det här laget har vi en ny virtuell tabell med data från tre tabeller. Det sista steget är att lägga till data från den fjärde tabellen (i vårt exempel, teacher ). och gå med med nyckeln från dessa tabeller (i vårt exempel, id från teacher tabell och teacher_id från learning tabell).

Om du måste gå med i ett annat bord kan du använda en annan JOIN operatör med ett lämpligt villkor i ON-klausulen. I teorin kan du gå med i så många bord du vill.


  1. Vad är databasanvändarrättigheter?

  2. Hur man ansluter till en avlägsen PostgreSQL-databas via SSL med Python

  3. PDO få det sista ID:t insatt

  4. Microsoft Access Tips och trick Del 2 – Formulär