21st Jun 2023 8 Leseminuten Wie man mehrere Joins in einer SQL-Abfrage schreibt Dominika Florczykowska JOIN Inhaltsverzeichnis Beginnen wir mit einem Beispiel Wie die Verknüpfung mehrerer Tabellen funktioniert Kreuzungstabellen Eine Kreuzungstabelle mit zusätzlichen Spalten Eine 3-Wege-Kreuzungstabelle Lasst uns ein paar Tabellen verbinden! 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. 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: 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. 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? 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: Lernen Sie einige Tipps, wie Sie SQL-JOINs üben können. Entdecken Sie Beispiele für SQL-JOINs mit detaillierten Erklärungen. Verstehen Sie, wie inner SQL JOIN funktioniert. Und um noch mehr zu üben, schauen Sie sich unseren SQL-JOINs interaktiven Kurs! Tags: JOIN