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.