Zurück zur Artikelliste Artikel
6 Leseminuten

Was ist ein SQL INNER JOIN?

Wie kombiniert man Daten aus verschiedenen Tabellen in einer Abfrage? Eine SQL-Funktion namens JOIN ist der am häufigsten verwendete Operator, um komplexe Abfragen zu erstellen. Lernen Sie die Grundlagen in diesem Artikel.

Mit SQL können wir Daten aus mehr als einer Tabelle auswählen. Der Grundgedanke bei der Verwendung relationaler Datenbanken ist die Auswahl von Daten aus verwandten Tabellen. Und dazu können wir den JOIN-Operator von SQL verwenden.

Es gibt viele Arten von JOINs in SQL. In diesem Artikel konzentrieren wir uns auf INNER JOIN, den Standardbefehl JOIN (d. h. den Befehl, den Sie erhalten, wenn Sie das Schlüsselwort JOIN allein verwenden).

Wann brauchen Sie JOIN?

Warum sollten wir Daten aus mehreren Tabellen zusammenführen? Die einfache Antwort ist, dass eine Tabelle manchmal nicht alle Daten enthält, die man braucht.

Stellen Sie sich vor, dass die movie Tabelle speichert Informationen in den Spalten id, title, production_year, und director_id.

idtitleproduction_yeardirector_id
1Psycho19601
2Midnight in Paris20112
3Sweet and Lowdown19932
4Talk to her20023
5The skin I live here20113

Eine weitere Tabelle, directorenthält Informationen über Regisseure: ihre id, name und birth_year.

idnamebirth_year
1Alfred Hitchcock1899
2Woody Allen1935
3Pedro Almodóvar1949

Beachten Sie, dass jeder Film nur eine Spalte für den Regisseur hat: director_id. Die gleichen Werte der ID-Nummern in der Tabelle director (in der Spalte director_id ) und in der Tabelle movie (in der Spalte id ).

Wir möchten die Daten eines jeden Films zusammen mit den Angaben zu seinem Regisseur anzeigen. Das Ergebnis ist eine neue Tabelle mit Daten aus zwei Tabellen: movie und director. Die Tabellen werden auf der Grundlage der ID-Nummern der Regisseure kombiniert (oder verbunden). Mit anderen Worten: Filme mit einer bestimmten director_id werden mit den Informationen des Regisseurs mit dieser ID kombiniert - z. B. wird der Film Psycho mit director_id=1 mit dem Datensatz id=1 (Alfred Hitchcock) in der director Tabelle. Sehen Sie sich die Ergebnismenge an:

idtitleproduction_yeardirector_ididnamebirth_year
1Psycho196011Alfred Hitchcock1899
2Midnight in Paris201122Woody Allen1935
3Sweet and Lowdown199322Woody Allen1935
4Talk to her200233Pedro Almodóvar1949
5The skin I live here201133Pedro Almodóvar1949

Eine illustrierte Version eines ähnlichen Beispiels finden Sie in dem Artikel An Illustrated Guide to the SQL INNER JOIN.

Wie man JOIN in einer SQL-Abfrage verwendet

Analysieren wir nun die Abfrage, die wir gerade verwendet haben. Hier ist sie noch einmal:

SELECT *  
FROM movie  
JOIN director  
ON movie.director_id=director.id;

JOIN ist eine kürzere Form der INNER JOIN Klausel; Sie können beide austauschbar verwenden.

Nachdem Sie SELECT Ihre Spalten hinzugefügt haben, geben Sie das Schlüsselwort FROM und den Namen der ersten Tabelle (in diesem Beispiel, movie). Dann geben Sie JOIN (oder INNER JOIN) ein, gefolgt von dem Namen der zweiten Tabelle (hier, director). Es folgen das Schlüsselwort ON und die Verknüpfungsbedingung (d. h. wie die Datensätze aus beiden Tabellen abgeglichen werden sollen). In diesem Fall gleicht die Verknüpfungsbedingung die Werte in der Spalte director_id in der Tabelle movie mit der id-Spalte in der Tabelle director.

Auf diese Weise werden die Datensätze in der Tabelle movie mit den richtigen Datensätzen in director. Jetzt wissen wir, dass der Film Sweet and Lowdown vom Regisseur Woody Allen gedreht wurde, der 1935 geboren wurde. Dieser Film hat director_id=2; es gibt einen passenden Wert für die entsprechende Spalte (id) in der Tabelle director.

Die Animation unten zeigt, wie ein JOIN -Operator funktioniert und welche Datensätze zurückgegeben werden:

JOIN

Ein JOIN Operator arbeitet logisch in zwei Schritten. Der erste Schritt liefert ein kartesisches Produkt, d. h. jede Zeile der ersten Tabelle wird mit jeder Zeile der zweiten Tabelle kombiniert. Im nächsten Schritt werden nur die Paare von Datensätzen zurückgegeben, die die Bedingung in der ON Klausel erfüllen - in diesem Beispiel nur Zeilen, bei denen director_id in movie identisch mit id in director.

Beachten Sie, dass die in der Verknüpfungsbedingung verwendeten Werte nicht unbedingt Zahlen sein müssen. Sie können auch Textwerte und andere, komplexere Bedingungen verwenden. Weitere Informationen finden Sie in dem Artikel SQL INNER JOIN in einfachen Worten erklärt.

Was passiert, wenn die Datensätze nicht übereinstimmen?

Was ist, wenn es Datensätze in der ersten Tabelle gibt, die nicht mit Datensätzen in der zweiten Tabelle abgeglichen werden können, oder umgekehrt? Wie funktioniert die INNER JOIN in diesem Fall? Schauen wir uns ein Beispiel an. Hier ist die movie Tabelle wieder:

idtitleproduction_yeardirector_id
1Psycho19601
2Midnight in Paris20112
3Sweet and Lowdown19932
4Talk to her20023
5The skin I live in20113
6The new house2020NULL

Und hier ist director:

idnamebirth_year
1Alfred Hitchcock1899
2Woody Allen1935
3Pedro Almodóvar1949
4Martin Scorsese1942

Hier ist die gleiche Abfrage:

SELECT title, production_year, director_id,
       id, name, birth_year   
FROM movie  
JOIN director  
ON movie.director_id=director.id;

Die Ergebnistabelle enthält nur Datensätze, die ein übereinstimmendes Paar sind:

idtitleproduction_yeardirector_ididnamebirth_year
1Psycho196011Alfred Hitchcock1899
2Midnight in Paris201122Woody Allen1935
3Sweet and Lowdown199322Woody Allen1935
4Talk to her200233Pedro Almodóvar1949
5The skin I live in201133Pedro Almodóvar1949

Wenn Sie sich die Tabelle movieanschaut, ist die Spalte director_id für den Film Das neue Haus NULL. Und in der Tabelle directorist der Regisseur Martin Scorsese (id=4) mit keiner Zeile der Tabelle verbunden movie. Daher werden diese Zeilen nicht in der Ergebnismenge angezeigt.

Die Regel für INNER JOIN (JOIN) ist, dass nur Zeilen mit Übereinstimmungen in beiden Tabellen zurückgegeben werden. Bei den anderen Arten von JOIN -Operatoren ist dieses Verhalten anders. Erweitern Sie dieses Thema, indem Sie den Artikel SQL JOIN Types Explained lesen.

Filtern von Datensätzen in der Ergebnismenge

Sie können die von JOIN zurückgegebenen Datensätze auch filtern. Zum Beispiel können wir nur die Filme und ihre Regisseure auflisten, bei denen der Regisseur nach 1940 geboren wurde. Hier ist die Abfrage:

SELECT title, production_year, director_id,
       id, name, birth_year   
FROM movie  
JOIN director  
ON movie.director_id=director.id
WHERE director.birth_year>1940;

Sie gibt das Ergebnis zurück:

idtitleproduction_yeardirector_ididnamebirth_year
4Talk to her200233Pedro Almodóvar1949
5The skin I live in201133Pedro Almodóvar1949

Auch hier haben wir Zeilen aus der Tabelle movie kombiniert mit Zeilen aus der Tabelle director. Die Join-Bedingung ist zunächst die gleiche (ON director.id=movie.director_id).

Im nächsten Schritt werden jedoch Datensätze mit einem Wert kleiner oder gleich 1940 in der Spalte birth_year entfernt. Sie finden also Woody Allen nicht in der Ergebnismenge, weil er 1935 geboren wurde (vor/weniger als 1940). Auch Alfred Hitchcock ist nicht dabei; er wurde 1899 geboren. Dies haben wir WHERE director.birth_year>1940 zu verdanken.

Möchten Sie mehr über SQL-JOINs erfahren?

Wenn Sie Ihre Kenntnisse vertiefen möchten, besuchen Sie unseren SQL für Anfänger Kurs, der mehr über die Verknüpfung von Tabellen enthält (einschließlich vieler praktischer Übungen!). Er ist Teil des Kurses SQL-Grundlagen der Ihnen helfen wird, Ihre SQL-Kenntnisse auf die nächste Stufe zu bringen.

Vielleicht kennen Sie sich auch schon mit SQL aus und möchten mehr über JOINs erfahren. In diesem Fall empfehle ich Ihnen einen Blick auf SQL-JOINs, SQL JOIN Types Explained, und unser SQL JOIN Cheat Sheet. Sie können auch unseren Kurs SQL-JOINs besuchen. Dann üben Sie das Gelernte mit unserem SQL-Praxis Online-Lernpfad. Viel Spaß beim Lernen!