Zurück zur Artikelliste Artikel
8 Leseminuten

Wie man mehrere Joins in einer SQL-Abfrage schreibt

Haben Sie sich jemals gefragt, wie Multiple Joins funktionieren? Möchten Sie wissen, wie man mehrere Tabellen in einer Abfrage verbindet? Lesen Sie diesen Artikel, um es herauszufinden!

Wenn Sie gerade erst mit SQL beginnen, haben Sie vielleicht Schwierigkeiten, das Konzept von SQL JOINzu verstehen, besonders wenn Sie mehr als zwei Tabellen in einer Abfrage verbinden müssen. Aber keine Sorge! In diesem Artikel werden wir untersuchen, wie JOIN funktioniert und alle seine Geheimnisse lösen!

Der beste Weg, SQL zu lernen, ist die Praxis. Wenn Sie das Verbinden von Tabellen in SQL beherrschen wollen, besuchen Sie unseren interaktiven SQL-JOINs Kurs. Er bietet über 90 praktische Übungen, mit denen Sie viele verschiedene Arten von JOINs schreiben können.

Beginnen wir mit einem Beispiel

Stellen Sie sich vor, Sie haben die folgenden drei Tabellen: player, team, und coach.

Wie man mehrere Joins in einer SQL-Abfrage schreibt

Erstellen wir eine Abfrage, die die Namen aller Spieler, den Namen ihrer Mannschaft und den Namen ihres Trainers auflistet. Sie können alle diese Informationen mit der folgenden Abfrage abrufen:

SELECT 
  player.name, 
  team.name, 
  coach.name
FROM player
JOIN team
ON player.team_id = team.id
JOIN coach
ON team.coach_id = coach.id;

Wir haben hier zwei verschiedene JOIN Operationen. Die Tabellen player und team werden zuerst verbunden, dann wird auch die Tabelle coach verbunden.

Um eine Verknüpfungsbedingung zu erstellen, müssen beide verknüpften Tabellen eine Spalte haben, die die gleichen Informationen enthält. Die Spalte team_id in der Tabelle player Tabelle enthält die team_id; dies ist derselbe Wert wie die id-Spalte in der team Tabelle. Die erste Join-Bedingung lautet also ON player.team_id = team.id

Ebenso ist die Verknüpfung zwischen der team und der coach Tabelle ist ON team.coach_id = coach.id.

Wenn Sie Schwierigkeiten haben, sich die genaue Syntax für SQL-JOINs zu merken, sollten Sie sich unser SQL JOIN Cheat Sheet merken!

Wie die Verknüpfung mehrerer Tabellen funktioniert

Nehmen wir an, dass wir die folgenden Daten in unseren Tabellen haben:

coach
idname
1Mark Swanson
2Alice Wright
team
idnamecoach_id
1Ambitious Raptors2
2Fire Pandas1
3Steel Cats2
player
idnameteam_id
1John Rodger1
2Paul Smith1
3David McDonald2
4Sarah Grey3
5Sophie Brown3

Führen wir nun die Abfrage aus, die die Namen aller Spieler, den Namen ihres Teams und den Namen ihres Trainers auflistet:

SELECT player.name, team.name, coach.name
FROM player
JOIN team
ON player.team_id = team.id
JOIN coach
ON team.coach_id = coach.id;

Wir erhalten die folgende Tabelle als Ergebnis:

player.nameteam.namecoach.name
John RodgerAmbitious RaptorsAlice Wright
Paul SmithAmbitious RaptorsAlice Wright
David McDonaldFire PandasMark Swanson
Sarah GreySteel CatsAlice Wright
Sophie BrownSteel CatsAlice Wright

Okay, aber was passiert eigentlich "unter der Haube", wenn zwei Tabellen verbunden werden? Schauen wir uns unser Beispiel einmal genauer an.

Erstens, die JOIN der Tabellen player und team Tabellen eine "virtuelle Tabelle". Diese sieht in etwa wie folgt aus:

player.idplayer.nameplayer.team_idteam.idteam.nameteam.coach_id
1John Rodger11Ambitious Raptors2
2Paul Smith11Ambitious Raptors2
3David McDonald22Fire Pandas1
4Sarah Grey33Steel Cats2
5Sophie Brown33Steel Cats2

Wie Sie sehen können, enthält diese "virtuelle Tabelle" alle Spalten aus den Tabellen player und team Tabellen.

Hey, wir haben in dieser Beispielabfrage 3 Tabellen verbunden! Was ist mit der coach Tabelle? Das ist ganz einfach! Wir haben bereits eine "virtuelle Tabelle", die aus den Tabellen player und team zusammengesetzt ist, und es sieht so aus, als ob wir wieder eine Verknüpfung von zwei Tabellen haben - nur dieses Mal verbinden wir die coach Tabelle mit der "virtuellen Tabelle". Die endgültige verknüpfte Tabelle wird also so aussehen:

player.idplayer.nameplayer.team_idteam.idteam.nameteam.coach_idcoach.idcoach.name
1John Rodger11Ambitious Raptors22Alice Wright
2Paul Smith11Ambitious Raptors22Alice Wright
3David McDonald22Fire Pandas11Mark Swanson
4Sarah Grey33Steel Cats22Alice Wright
5Sophie Brown33Steel Cats22Alice Wright

Die Spalten, die zur "virtuellen Tabelle" gehören (die Verknüpfung der Tabellen player und team) sind orange dargestellt; die Spalten der coach Tabelle sind blau dargestellt.

Wichtig: Wenn wir eine andere Tabelle verknüpfen, sollte die Verknüpfungsbedingung eine Spalte enthalten, die mit einer Spalte aus einer der zuvor verknüpften Tabellen übereinstimmt. In unserem Beispiel wird die coach Tabelle mit der virtuellen Tabelle verbunden, indem die ID des Trainers verwendet wird, die in der coach Tabelle und in der team Tabelle vorhanden ist. Sie war also in der "virtuellen Tabelle" vorhanden. Sie können sich vorstellen, dass die verknüpften Tabellen durch Verknüpfungsbedingungen miteinander "verbunden" sind:

Wie man mehrere Joins in einer SQL-Abfrage schreibt

Natürlich müssen wir nicht alle Spalten der verbundenen Tabelle anzeigen. In JOIN-Abfragen geben wir normalerweise an, welche Spalten wir sehen möchten. Beachten Sie, dass wir dies in der obigen Beispielabfrage getan haben: Nur der Name des Spielers, der Name der Mannschaft und der Name des Trainers wurden angezeigt.

Kreuzungstabellen

Eine Verknüpfungstabelle ist eine Tabelle, die zwei oder mehr Tabellen miteinander verbindet. Bei vielen Verknüpfungen mehrerer Tabellen wird eine Verbindungstabelle verwendet. Klingt vage? Sehen wir es uns in Aktion an.

Stellen Sie sich vor, Sie haben die Tabellen author und book. Ein Autor könnte viele Bücher geschrieben haben, und ein Buch kann viele Autoren haben. Um eine solche Beziehung zu modellieren (wir nennen sie eine Many-to-many-Beziehung), brauchen wir eine dritte Tabelle: author_book. Der einzige Zweck dieser Tabelle ist die Verbindung der Tabellen author und book Tabellen miteinander zu verbinden. Die Tabelle author_book Tabelle ist ein Beispiel für eine Verbindungstabelle.

Wie man mehrere Joins in einer SQL-Abfrage schreibt

Nehmen wir an, dass wir die folgenden Daten in unseren Tabellen haben:

author
idname
1Sarah Green
2Martin Davis
3Steve Johnson
book
idname
1The Translucent Door
2Whisper of Dawn
3To Catch a Dream
author_book
author_idbook_id
11
21
12
32
23

Wenn Sie die Tabellen author und book verbinden wollen, müssen Sie auch die Verzweigungstabelle author_book. Um zum Beispiel alle Autoren und ihre Bücher aufzulisten, können Sie eine Abfrage wie diese schreiben:

SELECT 
  author.name, 
  book.name
FROM author
JOIN author_book
ON author.id = author_book.author_id
JOIN book
ON book.id = author_book.book_id
ORDER BY author.name;

Zuerst wird die author_book Tabelle wird mit der author verbunden, um eine "virtuelle Tabelle" zu bilden. Dann wird die book Tabelle mit der "virtuellen Tabelle" verbunden.

Wenn Sie Tabellen verbinden, die durch eine Verbindungstabelle verknüpft sind, müssen Sie sicherstellen, dass Sie die Nicht-Verbindungstabellen mit der Verbindungstabelle verbinden. In unserem Beispiel, author wird verbunden mit author_book. Dann wird book ebenfalls verknüpft. Wenn Sie eine Kreuzungstabelle in Ihrer Datenbank haben, werden die Joins, die diese Tabellen betreffen, normalerweise drei oder mehr Tabellen umfassen.

Das Ergebnis der Abfrage sieht wie folgt aus. Die Spalten der Kreuzungstabelle sind im Ergebnis nicht zu sehen, aber die Verknüpfung ist wichtig, damit die Abfrage korrekt funktioniert:

author.namebook.name
Sarah GreenThe Translucent Door
Martin DavisThe Translucent Door
Sarah GreenWhisper of Dawn
Steve JohnsonWhisper of Dawn
Martin DavisTo Catch a Dream

Eine Kreuzungstabelle mit zusätzlichen Spalten

Im obigen Beispiel waren die einzigen Spalten in der Kreuzungstabelle die Spalten, die auf andere Tabellen verweisen. Dies muss jedoch nicht der Fall sein! Die Kreuzungstabelle kann auch andere Felder enthalten. In diesen Feldern werden zusätzliche Informationen über die Beziehung gespeichert.

Schauen wir uns ein Beispiel an. Diesmal haben wir die folgenden 3 Tabellen: doctor, patient und appointment. Können Sie erraten, welche Tabelle hier die Kreuzungstabelle ist?

Wie man mehrere Joins in einer SQL-Abfrage schreibt

Sie haben Recht! Die Kreuzungstabelle ist die appointment Tabelle. Sie verbindet Ärzte mit ihren Patienten, um Termine zu vereinbaren. Allerdings benötigt die appointment Tabelle braucht aber auch zusätzliche Spalten, z. B. Datum und Uhrzeit des Termins.

Nehmen wir an, dass wir die folgenden Daten in unseren Tabellen haben:

doctor
idname
1Ann Johnson
2Marlene Smith
3John West
patient
idname
1Mary Brown
2Sally Rodgers
3Mark Jackson
appointment
iddoctor_idpatient_iddatetime
11116/04/20238:00
21316/04/20239:00
32217/04/20238:00
42117/04/20239:00
53317/04/202316:00

Nun wollen wir eine Abfrage erstellen, die den Ärzten bei der Verwaltung ihres Terminkalenders hilft: Für jeden Arzt möchten wir alle Daten und Uhrzeiten seiner Termine sowie den Namen des jeweiligen Patienten sehen. Mit der folgenden Abfrage können Sie all diese Informationen abrufen:

SELECT 
  doctor.name, 
  appointment.date, 
  appointment.time, 
  patient.name
FROM doctor
JOIN appointment
ON doctor.id = appointment.doctor_id
JOIN patient
ON appointment.patient_id = patient.id;

Zuerst wird die appointment Tabelle wird mit der doctor Tabelle verbunden, um eine "virtuelle Tabelle" zu bilden. Dann wird die patient Tabelle mit der "virtuellen Tabelle" verbunden, indem auf die Kreuzungstabelle verwiesen wird appointment.

Das Ergebnis der Abfrage würde wie folgt aussehen:

doctor.nameappointment.dateappointment.timepatient.name
Ann Johnson16/04/20238:00Mary Brown
Ann Johnson16/04/20239:00Mark Jackson
Marlene Smith17/04/20238:00Sally Rodgers
Marlene Smith17/04/20239:00Mary Brown
John West17/04/202316:00Mark Jackson

Eine 3-Wege-Kreuzungstabelle

Kreuzungstabellen können auch drei oder mehr Tabellen miteinander verbinden. Stellen Sie sich zum Beispiel vor, dass ein Arzt an verschiedenen Klinikstandorten arbeitet. Wenn Sie einen Termin vereinbaren, wird Ihnen ein Arzt zugewiesen, aber Sie müssen auch die Klinik auswählen, in der der Termin stattfinden wird. Also würde unsere appointment Tabelle würde nun drei Tabellen verknüpfen: doctor, patientund clinic.

In diesem Szenario werden viele Abfragen die Verknüpfung aller vier Tabellen erfordern. In manchen Situationen können Kreuzungstabellen sogar noch mehr Tabellen verbinden.

Lasst uns ein paar Tabellen verbinden!

Gut gemacht! Sie haben gerade gelernt, wie man mehrere JOINs in einer SQL-Abfrage verwendet.

Lassen Sie uns zusammenfassen, was wir gerade gelernt haben:

  • Ein Drei-Tabellen-JOIN ist ein JOIN von zwei Tabellen mit einem weiteren Join. Der JOIN von zwei Tabellen bildet eine "virtuelle Tabelle", mit der die andere Tabelle verbunden wird.
  • Die Join-Bedingung ist normalerweise eine Gleichheit zwischen einigen Spalten in einer Tabelle, die Werte mit Spalten in der anderen Tabelle teilen.
  • Wenn Sie mehr als zwei Tabellen verknüpfen, müssen Sie in den meisten Fällen sicherstellen, dass die Verknüpfungsbedingung mit den bereits verknüpften Tabellen "verlinkt" ist.
  • Eine Verzweigungstabelle ist eine Tabelle, die zwei oder mehr andere Tabellen miteinander verbindet, indem sie auf die IDs der betreffenden Tabellen verweist. Wenn eine Kreuzungstabelle beteiligt ist, müssen Sie wahrscheinlich einen Multi-Table-Join verwenden.

Wenn Sie mehr über SQL-JOINs erfahren möchten, werfen Sie einen Blick auf diese Artikel in unserem Blog:

Und um noch mehr zu üben, schauen Sie sich unseren SQL-JOINs interaktiven Kurs!