Wenn Sie mit Ihrer Datenbank arbeiten, müssen Sie möglicherweise Daten aus einigen verschiedenen Tabellen zusammenstellen. Dieser Artikel zeigt Ihnen wie.
Ich habe hier und hier bereits über SQL-Joins geschrieben, aber nehmen wir uns einen Moment Zeit, um zuerst zu sehen, wie ein Join funktioniert, und insbesondere die für MySQL spezifische Syntax.
SQL-Join-Anweisung
Join ist eine Anweisung, mit der Sie zwei Tabellen zusammenfügen können, Zeilen abgleichen, die miteinander in Beziehung stehen, und nur die Zeilen behalten, die abgeglichen werden können, nicht ungepaarte Zeilen.
SELECT * FROM table1
INNER JOIN table2
ON table1.id = table2.id;
Der SELECT ... FROM
-Anweisung gibt an, welche die erste Tabelle ist, dann wird der zweite Tabellenname direkt nach dem INNER JOIN
geschrieben Schlüsselwörter.
Wie die beiden Tabellen verknüpft werden sollen, steht im ON
Erklärung. In diesem Fall werden die beiden Tabellen über die Beziehung table1.id = table2.id
verknüpft .
Es ist möglich, mehrere Join-Anweisungen zusammen zu verwenden, um mehr als eine Tabelle gleichzeitig zu verknüpfen.
SELECT *
FROM table1
INNER JOIN table2
ON table1.id = table2.id
INNER JOIN table3
ON table2.id = table3.id;
Dazu fügen Sie einen zweiten INNER JOIN
hinzu -Anweisung und ein zweites ON
-Anweisung, um die dritte Tabelle und die zweite Beziehung anzugeben.
Lassen Sie uns einen Moment über die Beziehungen sprechen, die Sie zwischen Tabellen haben können, und warum Sie vielleicht drei Tabellen miteinander verbinden möchten.
Beziehungen zwischen Tabellen in SQL
Wenn Sie Tabellen haben, die miteinander in Beziehung stehen, können ihre Beziehungen unterschiedlicher Art sein.
one-to-many
In einer 1:n-Beziehung kann eine Zeile der ersten Tabelle mit mehreren Zeilen der zweiten Tabelle in Beziehung stehen.
In einer relationalen Datenbank kann dies mit der zweiten Tabelle mit einer first_table_id
implementiert werden Spalte, die angibt, zu welcher Zeile der ersten Tabelle diese Zeile gehört.
viele-zu-eins
In einer Viele-zu-Eins-Beziehung kann eine Zeile der ersten Tabelle mit einer einzelnen Zeile der zweiten Tabelle verknüpft sein, und eine Zeile der zweiten Tabelle kann mit mehreren Zeilen der ersten Tabelle verknüpft sein.
In einer relationalen Datenbank kann dies implementiert werden, indem die erste Tabelle eine second_table_id
hat Spalte, die angibt, zu welcher Zeile der zweiten Tabelle diese Zeile gehört.
many-to-many
In diesem Fall beziehen sich mehrere Zeilen auf mehrere Zeilen.
Diese Art von Beziehung kann nicht wie bei SQL-Tabellen dargestellt werden – Sie müssen eine Kopplungstabelle zwischen den beiden Tabellen hinzufügen, sodass zwischen den Tabellen nur Viele-zu-Eins- und Eins-zu-Viele-Beziehungen vorhanden sind.
Jede Zeile der Tabelle in der Mitte repräsentiert eine Beziehung zwischen den Zeilen der linken Tabelle und den Zeilen der rechten Tabelle.
In der Praxis hat diese mittlere Tabelle in MySQL eine Spalte für first_table_id
und eine Spalte für second_table_id
, wobei jede Kombination einzigartig ist.
Joining-SQL-Tabellen in der Praxis
Stellen wir uns vor, wir haben die Datenbank einer Organisation, in der wir eine Tabelle mit Teams (deren Namen und andere identifizierende Informationen) und eine Tabelle mit Projekten (Name, Fortschritt usw.) haben.
id | Teamname | Spezialität |
---|---|---|
1 | Bananenwerfer | Bananen |
2 | Holznager | Nagen an Holz |
3 | Die rosa Elefanten | Auf den Boden stampfen |
4 | Flockige Kartoffeln | Arbeiten und Schlafen |
id | Projektname | Fortschritt |
---|---|---|
1 | Dammbau | Noch mehr Holznagen und Bodenstampfen nötig |
2 | Bananenkuchen | Jemand isst alle Bananen |
3 | Schlafforschung | Zu viel Schlafen, zu wenig Forschung |
Da ein Team an mehreren Projekten arbeiten kann und ein Projekt von mehreren Teams bearbeitet werden kann, gibt es auch eine dritte Tabelle, die Team-Projekt-Matches verfolgt.
Projekt-ID | Gruppen-ID |
---|---|
1 | 2 |
1 | 3 |
2 | 1 |
3 | 1 |
3 | 2 |
3 | 3 |
3 | 4 |
Wir können einen JOIN
verwenden Anweisung, um alles zusammenzufügen, wenn wir die Informationen aus den Tabellen in einer für Menschen lesbaren Weise anzeigen müssen, wie hier:
SELECT
teams.team_name AS team_name,
projects.project_name AS project_name
FROM TABLE teams
INNER JOIN matches
ON teams.id = matches.team_id
INNER JOIN matches
ON matches.project_id = projects.id
ORDER BY teams.id;
Wir wählen aus, welche Spalten aus jeder Tabelle mit einem SELECT
angezeigt werden sollen Aussage.
Wie die Zeilen der Tabellen kombiniert werden sollen, geben wir mit einem ON
an Aussage.
Und wir ordnen die Zeilen so an, wie wir es bevorzugen, mit einem ORDER BY
Aussage.
Das ON
Anweisungen teams.id = matches.team_id
und matches.projects_id = projects.id
bedeutet, dass die Zeilen mit den Zeilen der matches
kombiniert werden Tisch. Jede Zeile der Ausgabetabelle enthält den Projektnamen und den Teamnamen kombiniert mit den Paaren aus Projekt-ID und Team-ID in den matches
Tabelle.
Die Ausgabetabelle sieht wie folgt aus.
Teamname | Projektname |
---|---|
Bananenwerfer | Bananenkuchen |
Bananenwerfer | Schlafforschung |
Holznager | Dammbau |
Holznager | Schlafforschung |
Die rosa Elefanten | Dammbau |
Die rosa Elefanten | Dammbau |
Flockige Kartoffeln | Schlafforschung |
Es gibt keine Spalte direkt von den matches
Tisch. Der matches
Tabelle wird nicht in der Ausgabe angezeigt, aber sie wird als Anleitung zum Kombinieren der Zeilen der teams
verwendet und projects
Tabellen.
Schlussfolgerung
Der JOIN
-Anweisung können Sie eine oder mehrere Tabellen zusammenfügen. Es muss in Verbindung mit ON
verwendet werden -Anweisung, um die Beziehung zwischen den Zeilen einer Tabelle und den Zeilen einer anderen Tabelle zu bestimmen.
In diesem Artikel haben Sie gelernt, wie Sie den JOIN
verwenden Anweisung, drei verschiedene Tabellen zusammenzufügen.