Zurück zur Artikelliste Artikel
9 Leseminuten

Wie man Tabellen in SQL verbindet (JOIN)

Müssen Sie Daten anzeigen, die in verschiedenen Tabellen gespeichert sind? Dann ist es an der Zeit, SQL-JOINs zu verwenden! Das kann für Anfänger ein schwieriges Thema sein, deshalb habe ich diese umfassende Schritt-für-Schritt-Anleitung zum Verbinden von Tabellen in SQL vorbereitet.

Oft sind die Informationen, die Sie anzeigen möchten, in mehreren Tabellen gespeichert. In solchen Fällen müssen Sie diese Tabellen verbinden, indem Sie angeben, welche Zeilen mit anderen Zeilen kombiniert werden sollen. Genau das ist die Aufgabe von JOIN. Die JOIN-Klausel in SQL wird verwendet, um Zeilen aus einer oder mehreren Tabellen auf der Grundlage eines gemeinsamen Spaltenwerts zu kombinieren.

Nehmen wir zum Beispiel an, wir erforschen moderne Architektur und haben die Tabellen buildings, architects, und building_restorations:

buildings
idnamelocationyeararchitect_id
124Fallingwater HouseMill Run, PA, USA193511
231Barcelona PavilionBarcelona, Spain192915
764Villa DirickzBrussels, Belgium193318
850Guggenheim MuseumNew York, NY, USA195911
894Neue NationalgalerieBerlin, Germany196815

architects
idnameyear_of_birthyear_of_death
11Frank Lloyd Wright18671959
15Ludwig Mies Van der Rohe18861969
18Marcel Leborgne18981978

building_restorations
idbuilding_idarhitect_idrestoration_year
1124112001
2231151986
3850112008
4894152021

Nehmen wir nun an, wir möchten die Gebäude zusammen mit den jeweiligen Architekten auflisten. Beachten Sie, dass die Namen der Gebäude und die Namen der Architekten in verschiedenen Tabellen gespeichert sind. Wir haben jedoch die Spalte architect_id in der Tabelle buildings Tabelle und die Spalte id in der architects Tabelle. Wir können diese beiden Tabellen auf der Grundlage dieser verwandten Spalten verbinden. Hier ist die Abfrage:

SELECT buildings.name, architects.name
FROM buildings
JOIN architects
ON buildings.architect_id = architects.id;

Zuerst geben wir die Spalten an, die wir in der SELECT Klausel anzeigen wollen. Dann verbinden wir die Tabellen, indem wir eine Tabelle in der FROM Klausel, eine andere Tabelle in der JOIN Klausel und die zugehörigen Spalten in der ON Klausel angeben. Hier ist die Ausgabe:

namename
Guggenheim MuseumFrank Lloyd Wright
Fallingwater HouseFrank Lloyd Wright
Neue NationalgalerieLudwig Mies Van der Rohe
Barcelona PavilionLudwig Mies Van der Rohe
Villa DirickzMarcel Leborgne

Machen Sie sich keine Sorgen, wenn Ihnen die Verknüpfung von Tabellen in SQL verwirrend vorkommt. Wir werden die Syntax von SQL JOIN weiter unten besprechen. Sie können auch in diesem interaktiven Kurs mehr Übung mit SQL-JOINs bekommen.

Schritt für Schritt durch SQL JOIN

Relationale Datenbanken enthalten mehrere Tabellen, in denen unterschiedliche Informationen gespeichert sind. Da es bei der Datenanalyse darum geht, Erkenntnisse aus den Daten zu gewinnen, indem man sie aus verschiedenen Blickwinkeln analysiert, ist das Verbinden von Tabellen in SQL sehr verbreitet. Für viele Anfänger ist dieses Thema jedoch eine Herausforderung.

Wenn Sie neu bei SQL-JOINs sind, finden Sie es vielleicht nützlich, diese illustrierte Anleitung zum SQL INNER JOIN, dem grundlegenden JOIN-Typ, durchzugehen.

Doch nun wollen wir uns die JOIN-Syntax genauer ansehen.

Schritt 1. Identifizieren Sie die Tabellen für den JOIN

Wir beginnen immer mit der Identifizierung der Tabellen, die die Informationen enthalten, die angezeigt werden sollen. Im obigen Beispiel wollten wir die Gebäudenamen zusammen mit den Namen der Architekten anzeigen. Da die Gebäudenamen in der Tabelle buildings und die Namen der Architekten in der Tabelle architects gespeichert sind, haben wir diese beiden Tabellen verbunden, um die erforderlichen Informationen anzuzeigen.

Ein anderes Beispiel wäre die Auflistung der Restaurierungen - insbesondere der Gebäudename und das Jahr der Restaurierung. Da der building Name nur in der Tabelle Gebäude gespeichert ist und das Jahr der Restaurierung nur in der Tabelle building_restorations vorhanden ist, müssen wir diese beiden Tabellen verbinden, um die gewünschten Informationen anzuzeigen.

In der Beispielabfrage werden die Tabellen wie folgt angegeben:

FROM buildings
JOIN building_restorations

Bei einfachen JOINs spielt die Reihenfolge der Tabellen keine Rolle.

Schritt 2. Identifizieren Sie die JOIN-Bedingung

Der nächste Schritt besteht darin, der Datenbank mitzuteilen, welche Zeilen mit welchen anderen Zeilen verknüpft werden sollen. Das nennt man die JOIN-Bedingung. Normalerweise ist die JOIN-Bedingung eine Gleichheitsbedingung, d. h. Sie geben die Spalten an, die die Tabellen gemeinsam haben, und setzen ein Gleichheitszeichen zwischen diese Spalten. Diese Bedingung wird nach dem Schlüsselwort ON eingefügt:

ON buildings.architect_id = architects.id

Beachten Sie, dass die meisten Datenbanken eine einheitliche Namenskonvention haben; Sie müssen die Konventionen in Ihrer Datenbank kennen, um effektiv damit arbeiten zu können. In der Regel wird die erste Spalte id oder ähnlich genannt und als eindeutiger Bezeichner für jeden Datensatz verwendet. Dieser eindeutige Bezeichner wird auch als Primärschlüssel bezeichnet. Alle Tabellen in unserem Beispiel (d. h. buildings, architects, und building_restorations) haben die Spalte id als Primärschlüssel.

Dann ist es üblich, dass eine Tabelle eine Spalte hat, die auf eine andere Tabelle verweist, wie die Spalte architect_id in der Tabelle buildings Tabelle oder die Spalten building_id und architect_id in der building_restorations Tabelle. Diese Spalten werden als Fremdschlüsselbezeichnet.

Es ist sehr üblich, Tabellen unter Verwendung des Primärschlüssels einer Tabelle zu verbinden, der der Fremdschlüssel der anderen Tabelle ist. Um die Gebäude zusammen mit ihren Architekten aufzulisten, haben wir die entsprechenden Tabellen mit dem Primärschlüssel der architects Tabelle (d.h. id) und dem Fremdschlüssel der buildings Tabelle (d. h. architect_id, der auf die Tabelle architect Tabelle verweist). Wenn wir die Gebäude zusammen mit dem Jahr der Restaurierung auflisten wollten, würden wir die Tabellen buildings und die building_restorations unter Verwendung des Primärschlüssels der Tabelle Gebäude (d. h. id) und des entsprechenden Fremdschlüssels der Tabelle building_restorations Tabelle (d. h. building_id).

In einigen Fällen kann ein Primärschlüssel mehrspaltig sein. Wenn die referenzierende Tabelle auch einen zweispaltigen Fremdschlüssel enthält, können Sie die Tabellen mit einer JOIN-Bedingung mit zwei Gleichheiten verbinden. Zum Beispiel könnte man statt einer id Spalte in der architects einen zusammengesetzten Primärschlüssel haben, der aus zwei Spalten besteht: (1) style_id, der auf den Architekturstil verweist (z. B. modern, zeitgenössisch usw.) und (2) architect_id, der auf die ID eines bestimmten Architekten verweist, der in diesem Stil arbeitet. Unter der Annahme, dass die buildings Tabelle nun auch die Spalten style_id und architect_id enthält, können wir die Spalten buildings und architects mit der folgenden JOIN-Bedingung verbinden:

ON buildings.style_id = architects.style_id AND 
   buildings.architect_id = architects.architect_id

Beachten Sie auch, dass die Gleichheitsbedingung zwar die häufigste Bedingung für die Verknüpfung von Tabellen in SQL ist, Sie aber auch andere Bedingungen für die Verknüpfung von Tabellen verwenden können. Dies wird als Nicht-Gleichheits-Join bezeichnet; Beispiele für Nicht-Gleichheits-Joins finden Sie in diesem praktischen Leitfaden.

Schritt 3. Ordnungsgemäßer Bezug auf die Spalten

Wenn Sie Daten aus mehreren Tabellen anzeigen, müssen Sie sehr vorsichtig sein, wenn Sie sich auf die Spalten beziehen. Es kann sein, dass wir in verschiedenen Tabellen Spalten mit demselben Namen haben. (In allen drei Tabellen gibt es eine Spalte mit dem Namen id.) Wenn Sie also auf eine bestimmte Spalte verweisen, geben Sie zuerst den Tabellennamen an, verwenden dann einen Punkt und fügen schließlich den Spaltennamen ein (z. B. buildings.architect_id). Die gleichen Regeln gelten für die Benennung von Spalten in der Bedingung ON, der Klausel SELECT oder in anderen Klauseln der Abfrage.

Wenn der Spaltenname jedoch eindeutig ist (d. h. nur in einer Tabelle verwendet wird), können wir nur den Spaltennamen angeben und den Tabellennamen weglassen. Wenn wir zum Beispiel das Jahr jedes Gebäudes zusammen mit dem Namen und dem Architekten anzeigen wollen, können wir die folgende Abfrage verwenden:

SELECT buildings.name, architects.name, year
FROM buildings
JOIN architects
ON buildings.architect_id = architects.id;

Da die Spalte Jahr nur in der Tabelle buildings vorhanden ist, weiß die Datenbank, welche Spalte wir anzeigen wollen, und verlangt nicht, dass wir die Tabelle angeben.

Schritt 4. Tabellenalias verwenden (optional)

Auch wenn einige der Spaltennamen eindeutig sind und ohne Tabellennamen referenziert werden können, müssen Sie in den meisten Fällen den Namen der Tabelle vor jedem Spaltennamen angeben. Wenn der Tabellenname lang ist, ist es nicht bequem oder lesbar, ihn immer wieder einzugeben. In solchen Fällen können Sie einen Tabellenalias verwenden, d. h. einen alternativen Kurznamen für diese Tabelle in dieser bestimmten Abfrage.

Sie deklarieren die Aliasnamen in den Klauseln FROM und JOIN, indem Sie den Alias hinter den vollständigen Tabellennamen setzen, mit einem Leerzeichen dazwischen. Sie verwenden dann den Alias überall anstelle des vollständigen Tabellennamens:

SELECT b.name, a.name
FROM buildings b
JOIN architects a
ON b.architect_id = a.id;

Um Abfragen lesbar und für andere verständlich zu halten, wählen Sie aussagekräftige Namen für Aliasnamen. Normalerweise wird der erste Buchstabe eines Tabellennamens als Alias verwendet (z.B. b für buildings). Wenn ein Tabellenname aus mehreren Wörtern besteht, können Sie die ersten Buchstaben jedes Wortes verwenden (z.B. br für building_restorations).

Schritt 5. Spaltenalias verwenden (optional)

Wenn das Ergebnis einer Abfrage angezeigt wird, sind die ursprünglichen Spalten die in der Ausgabetabelle verwendeten Spaltennamen. In manchen Fällen möchten Sie diese Spalten umbenennen - oder mit anderen Worten, die ursprünglichen Spaltennamen durch Spaltenaliase ersetzen.

Diese Option wird am häufigsten verwendet, wenn zwei Spalten mit demselben Namen aus zwei verschiedenen Tabellen stammen und Sie klar erkennen möchten, welche Art von Informationen in jeder Spalte der Ausgabe angezeigt wird.

Sie haben vielleicht bemerkt, dass in der Ausgabetabelle unserer allerersten Abfrage beide Spalten Name heißen; wir müssen den Tabelleninhalt untersuchen, um zu verstehen, welche Spalte Gebäude und welche Spalte Architekten auflistet. Ersetzen wir die ursprünglichen Namen durch sinnvolle Aliasnamen. Dazu deklarieren wir die Spaltenaliase in der Anweisung SELECT, nach dem Schlüsselwort AS:

SELECT b.name AS building, a.name AS architect
FROM buildings b
JOIN architects a
ON b.architect_id = a.id;

Jetzt haben wir die folgende Ausgabe:

buildingarchitect
Guggenheim MuseumFrank Lloyd Wright
Fallingwater HouseFrank Lloyd Wright
Neue NationalgalerieLudwig Mies Van der Rohe
Barcelona PavilionLudwig Mies Van der Rohe
Villa DirickzMarcel Leborgne

Viel besser, nicht wahr?

Beachten Sie, dass Sie jede beliebige Spalte umbenennen können, nicht unbedingt nur die mit demselben Namen. Außerdem beeinflusst der Spaltenalias nur die Anzeige des Ergebnisses; er kann nicht als Spaltenname in anderen Teilen der Abfrage verwendet werden.

Zusammenfassung SQL-JOINs!

In realen Szenarien müssen Sie oft Daten aus zwei oder mehr Tabellen kombinieren und analysieren. Hier kommt SQL-JOINs ins Spiel! Um zwei Tabellen in SQL zu verbinden, müssen Sie eine Abfrage mit den folgenden Schritten schreiben:

  1. Identifizieren Sie die Tabellen, die gejoint werden sollen.
  2. Identifizieren Sie die JOIN-Bedingung.
  3. Beziehen Sie sich richtig auf die Spalten.
  4. (Optional) Verwenden Sie Tabellen-Aliase, um die Abfrage lesbar zu machen.
  5. (Optional) Verwenden Sie Spalten-Aliase, um das Ergebnis lesbar zu machen.

Nach der Verknüpfung der erforderlichen Tabellen können Sie WHERE, GROUP BY, HAVING, ORDER BY und andere SQL-Klauseln auf die gleiche Weise wie bei einer Abfrage mit einer einzelnen Tabelle verwenden.

In diesem Artikel haben wir uns mit den Grundlagen der Tabellenverknüpfung in SQL beschäftigt. Es gibt jedoch noch viel mehr zu lernen. Wir haben hier nur Beispiele für innere JOINs verwendet, aber es gibt noch mehrere andere JOIN-Typen in SQL. Sehen Sie sich unseren KursSQL-JOINs an - er enthält 93 interaktive Übungen, die alle gängigen JOIN-Typen abdecken, einschließlich Self-Joins, Non-Equi JOINs und mehr. Erfahren Sie mehr über den Kurs in diesem Übersichtsartikel.

Wenn Sie wirklich sicher im Umgang mit SQL-JOINs werden wollen, probieren Sie unseren SQL-Praxis Kurs. Er enthält Kurse, die über SQL-JOINs hinausgehen; insgesamt gibt es 341 Programmieraufgaben zu lösen. Das ist eine MENGE an Übung!

Vielen Dank fürs Lesen und viel Spaß beim Lernen!