Database
 sql >> Datenbank >  >> RDS >> Database

So verbinden Sie mehrere (3+) Tabellen in einer Anweisung

Problem:

Sie möchten Daten aus mehr als zwei Tabellen mit nur einer SELECT-Anweisung kombinieren.

Beispiel:

In unserer Datenbank gibt es vier Tabellen:student , teacher , subject , und learning .

Der student Tabelle enthält Daten in den folgenden Spalten:id , first_name , und last_name .

id Vorname Nachname
1 Tom Müller
2 Johannes Frühling
3 Lisa Williams
4 Ellie Barker
5 James Moore

Der teacher Tabelle enthält Daten in den folgenden Spalten:id , first_name , last_name , und subject .

id Vorname Nachname
1 Mailand Smith
2 Karl Davis
3 Markieren Moore

Das subject Tabelle enthält Daten in den folgenden Spalten:id und name .

id Name
1 Englisch
2 Kunst
3 Musik

Schließlich das learning Tabelle enthält Daten in den folgenden Spalten:id , mark , subject_id , student_id , und teacher_id .

id markieren subject_id student_id Lehrer-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

Wir wollen wissen, welche Schüler Englisch, Musik und Kunst lernen und welche Lehrer diese Klassen unterrichten. Wählen Sie das Kursfach, den Nachnamen des Kursteilnehmers und den Nachnamen des Kursleiters aus.

Lösung:

Verwenden Sie mehrere JOIN s in Ihrer Abfrage:

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; 

Diese Abfrage gibt Datensätze mit dem Namen des Kursfachs und den Nachnamen der Schüler und Lehrer zurück:

subject_name s_nachname t_nachname
Musik Moore Müller
Kunst Davis Müller
Englisch Smith Frühling
Kunst Davis Williams
Musik Davis Barker
Musik Moore Moore

Diese Daten stammen aus drei Tabellen, also müssen wir alle diese Tabellen zusammenführen, um die gesuchten Informationen zu erhalten.

Diskussion:

Wenn Sie Daten kombinieren möchten, die in mehreren (mehr als zwei) Tabellen gespeichert sind, sollten Sie den JOIN verwenden Betreiber mehrfach. Zuerst verbinden Sie wie gewohnt zwei Tabellen (mit JOIN , LEFT JOIN , RIGHT JOIN , oder FULL JOIN , wie angemessen). Der JOIN Der Vorgang erstellt eine „virtuelle Tabelle“, die kombinierte Daten aus den beiden Tabellen speichert. In unserem Beispiel ist die Ergebnistabelle eine Kombination aus learning und subject Tabellen.

Der nächste Schritt besteht darin, diese Ergebnistabelle mit der dritten Tabelle (in unserem Beispiel student ). Dies ist wie ein normales JOIN :Sie treten dem „virtuellen Tisch“ und dem dritten Tisch mit einer entsprechenden Bedingung bei. Diese Bedingung sollte generell eine oder mehrere Spalten aus der Zusatztabelle (student ) und eine oder mehrere Spalten aus der „virtuellen Tabelle“. In unserem Beispiel verweisen wir auf student Tabelle in der zweiten JOIN-Bedingung.

An diesem Punkt haben wir eine neue virtuelle Tabelle mit Daten aus drei Tabellen. Der letzte Schritt besteht darin, Daten aus der vierten Tabelle hinzuzufügen (in unserem Beispiel teacher ). und treten Sie mit dem Schlüssel aus diesen Tabellen bei (in unserem Beispiel id vom teacher Tabelle und teacher_id aus dem learning Tabelle).

Wenn Sie an einem anderen Tisch teilnehmen müssen, können Sie einen anderen JOIN verwenden Operator mit einer entsprechenden Bedingung in der ON-Klausel. Theoretisch können Sie an so vielen Tischen teilnehmen, wie Sie möchten.