Zurück zur Artikelliste Artikel
5 Leseminuten

Wie man zwei Tabellen über mehrere Spalten in SQL verbindet

Der SQL JOIN ist ein wichtiges Werkzeug, um Informationen aus mehreren Tabellen zu kombinieren. Meistens werden Sie Tabellen auf der Grundlage eines Primärschlüssels aus einer Tabelle und eines Fremdschlüssels aus einer anderen Tabelle verknüpfen. Es kommt jedoch auch häufig vor, dass Sie Tabellen anhand von zwei oder mehr Spalten verknüpfen müssen. In diesem Artikel gehe ich darauf ein, warum Sie Tabellen nach mehreren Spalten verknüpfen sollten und wie Sie dies in SQL tun können.

Das Verknüpfen von Tabellen über nur eine Spalte funktioniert in einigen Fällen nicht. Zum Beispiel kann es vorkommen, dass es keine Spalte in der Tabelle gibt, die die Zeilen eindeutig identifiziert. Oder die Tabellen, die Sie verknüpfen wollen, haben nicht nur eine gemeinsame Spalte, die für die Verknüpfung verwendet werden kann. In solchen Situationen müssen Sie möglicherweise mehrere Spalten verwenden, um Tabellen zu verknüpfen - z. B. den Vor- und den Nachnamen oder die Bestellnummer und das Jahr, wenn die Bestellnummerierung jedes Jahr neu beginnt.

Sehen wir uns einige Beispiele an, um zu verstehen, wie dies in der Praxis funktioniert.

Verbinden zweier Tabellen über mehrere Spalten

Stellen wir uns vor, wir betreiben ein Netzwerk von Kindergärten. In unserer Datenbank haben wir die folgenden Tabellen:

  • studentsHier finden Sie Informationen über jeden Schüler, wie z. B. den Namen, den Kindergarten, den er oder sie besucht hat, die Klasse, das Abschlussjahr und den Lehrer.
  • teachers, wo wir den Namen und das Ausbildungsniveau jedes Lehrers haben.
  • classesHier finden Sie Informationen über jede Klasse, wie den Namen des Kindergartens, die Klasse, das Abschlussjahr und den Namen des Klassenzimmers.
students
idfirst_namelast_namekindergartengraduation_yearclassteacher_first_nameteacher_last_name
1MaryJonesSunshine2021AIsabellaLopez
2JohnSmithLove & Learn2020BMiaGonzalez
3MarkAndersonButterfly2020BSophiaStevenson
4StevenMooreButterfly2021CMariaStuart
5DianaMillerButterfly2021CMariaStuart
6AnnaDavisSunshine2021AEmmaGrey
7HellenBrownSunshine2020BOliviaTaylor
8GracyLeeLove & Learn2020ACharlotteJohnson
9SaraGarciaLove & Learn2021BJasmineHarris
10KateWilsonSunshine2019BOliviaTaylor
teachers
idfirst_namelast_nameeducation
101IsabellaLopezUndergraduate
102MariaStuartUndergraduate
103EmmaGreyGraduate
104OliviaTaylorGraduate
105CharlotteJohnsonGraduate
106MiaGonzalezUndergraduate
107SophiaStevensonUndergraduate
108JasmineHarrisUndergraduate
classes
idkindergartengraduation_yearclassclassroom
201Sunshine2019BIronman
202Butterfly2020BSun
203Love & Learn2020ALove
204Love & Learn2020BHappiness
205Sunshine2020AHulk
206Sunshine2020BSuperman
207Butterfly2021AGarden
208Butterfly2021BIsland
209Butterfly2021CSea
210Love & Learn2021ADream
211Love & Learn2021BLaugh
212Sunshine2021AIronman

Sie werden feststellen, dass unsere Datenbank nicht perfekt organisiert ist. Normalerweise würde die students Tabelle Fremdschlüssel wie die ID des Lehrers und die ID der Klasse enthalten, anstatt detaillierte Informationen über die entsprechenden Lehrer und Klassen. Aber selbst wenn die Daten so gespeichert sind, können wir die Tabellen verbinden, solange jede Tabelle eine Reihe von Spalten hat, die jeden Datensatz eindeutig identifizieren.

Es ist Zeit für ein paar SQL-Abfragen!

Beispiel 1: SQL JOIN nach zwei Spalten

In unserem ersten Beispiel möchten wir das Bildungsniveau des Lehrers für jeden Schüler erfahren. Hierfür müssen wir die Informationen aus den Tabellen students und teachers. Leider haben wir die Spalte Lehrer-ID nicht in der Tabelle students Tabelle. Wir haben jedoch die Vor- und Nachnamen der Lehrer in beiden Tabellen. Solange wir keine Lehrer mit identischen vollständigen Namen haben, können wir diese Tabellen sicher über diese beiden Spalten verknüpfen. Hier ist die Abfrage:

SELECT s.first_name, s.last_name, s.teacher_first_name, s.teacher_last_name, t.education AS teacher_education
FROM students s
JOIN teachers t
ON s.teacher_first_name = t.first_name AND s.teacher_last_name = t.last_name;

Wenn Sie eine Auffrischung der SQL JOIN -Syntax benötigen, sehen Sie sich dieses großartige SQL JOIN Cheat Sheet an.

Beachten Sie die beiden Bedingungen in der ON-Klausel, da wir die Bedingung stellen, dass (1) der Vorname aus der Lehrertabelle mit dem Vornamen des Lehrers in der Schülertabelle übereinstimmen muss und (2) der Nachname aus der Lehrertabelle mit dem Nachnamen des Lehrers in der Schülertabelle übereinstimmen muss. Wie Sie sehen, können wir zwei Bedingungen angeben, indem wir beide in die ON-Klausel einfügen und das Schlüsselwort AND dazwischen setzen.

Hier ist das Ergebnis:

first_namelast_nameteacher_first_nameteacher_last_nameteacher_education
MaryJonesIsabellaLopezUndergraduate
StevenMooreMariaStuartUndergraduate
DianaMillerMariaStuartUndergraduate
AnnaDavisEmmaGreyGraduate
HellenBrownOliviaTaylorGraduate
KateWilsonOliviaTaylorGraduate
JohnSmithMiaGonzalezUndergraduate
MarkAndersonSophiaStevensonUndergraduate
GracyLeeCharlotteJohnsonGraduate
SaraGarciaJasmineHarrisUndergraduate

Sieht gut aus! Wir sehen jetzt für jeden Schüler die entsprechende Ausbildungsstufe des Lehrers.

Um mehr Übung mit der Verknüpfung von Tabellen in SQL zu bekommen, schauen Sie sich diesen interaktiven SQL-JOINs Kurs.

Beispiel 2: SQL JOIN nach drei Spalten

Im vorherigen Beispiel haben wir gesehen, wie man zwei Tabellen anhand von zwei Bedingungen verknüpft. Bei Bedarf können wir auch mehr Bedingungen verwenden. Sehen wir uns nun an, wie man Tabellen in SQL mit drei Bedingungen verknüpft.

Wir möchten nun den Namen des Klassenzimmers herausfinden, in dem jeder Schüler gespielt und gelernt hat. Die Informationen über die Klassenzimmer sind in der Tabelle classes Tabelle.

Wir haben die Klassen-ID nicht in der students Tabelle. Wir haben dort jedoch drei Spalten, die in Kombination eine Klasse eindeutig identifizieren: Kindergarten, graduation_year, class. Die gleichen Spalten sind auch in der classes Tabelle. Wir werden also kombinieren students und classes drei Spalten verwenden:

SELECT s.first_name, s.last_name, c.kindergarten, c.graduation_year, c.class, c.classroom
FROM students s
JOIN classes c
ON s.kindergarten = c.kindergarten AND s.graduation_year = c.graduation_year AND s.class = c.class;

Wie Sie sehen, verbinden wir die Tabellen mit den drei Bedingungen in der ON Klausel mit den AND Schlüsselwörtern dazwischen. Hier ist die Ausgabe:

first_namelast_namekindergartengraduation_yearclassclassroom
MarkAndersonButterfly2020BSun
JohnSmithLove & Learn2020BHappiness
StevenMooreButterfly2021CSea
MaryJonesSunshine2021AIronman
GracyLeeLove & Learn2020ALove
HellenBrownSunshine2020BSuperman
DianaMillerButterfly2021CSea
AnnaDavisSunshine2021AIronman
SaraGarciaLove & Learn2021BIronman
KateWilsonSunshine2019BLaugh

Die JOIN hat wie vorgesehen funktioniert! Wir haben jetzt das entsprechende Klassenzimmer für jeden Schüler.

Wenn Sie weitere Beispiele sehen möchten, lesen Sie dieses Kochbuch über die Verknüpfung von Tabellen über mehrere Spalten.

Üben wir SQL-JOINs nach mehreren Spalten!

SQL JOIN ist eines der grundlegenden Werkzeuge für Datenanalysten, die mit SQL arbeiten. Relationale Datenbanken sind so aufgebaut, dass analytische Berichte in der Regel die Kombination von Informationen aus mehreren Tabellen erfordern. Sie werden Tabellen verbinden, manchmal über eine Spalte und manchmal über zwei oder mehr Spalten.

Wie Sie gesehen haben, ist die Verknüpfung von Tabellen über mehrere Spalten in SQL recht einfach. Wenn Sie jedoch sicher im Umgang mit SQL JOINs werden wollen, ist das Üben mit realen Datensätzen ein wichtiger Erfolgsfaktor.

Ich empfehle, mit diesem interaktiven Kurs SQL-JOINs zu beginnen, der 93 Programmieraufgaben enthält. Er deckt die gängigsten Arten von Joins wie JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN und Self-Joins sowie Non-Equi-Joins ab.

Um noch mehr Übung mit SQL JOINs und anderen grundlegenden SQL-Tools zu bekommen, sollten Sie den SQL von A bis Z Kurs. Er umfasst 7 interaktive Kurse, die Standard-SQL-Funktionen, grundlegende SQL-Berichte, Fensterfunktionen, allgemeine Tabellenausdrücke, rekursive Abfragen und vieles mehr behandeln.

Danke fürs Lesen und viel Spaß beim Lernen!