Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL Inner Join – Wie man 3 Tabellen in SQL und MySQL verbindet

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.