Zurück zur Artikelliste Artikel
8 Leseminuten

INNER JOIN vs. OUTER JOIN: Was ist der Unterschied?

Die Entscheidung, wann ein INNER JOIN und wann ein OUTER JOIN verwendet werden sollte, ist für Anfänger oft eine Herausforderung. In diesem Artikel finden Sie Erklärungen und Beispiele, die Ihnen helfen werden, den Unterschied zwischen diesen beiden Joins besser zu verstehen.

In SQL können Sie mit JOINs Daten aus verschiedenen Tabellen kombinieren; INNER JOIN und OUTER JOIN sind einfach Arten von JOIN -Anweisungen. Wenn Sie mit relationalen Datenbanken arbeiten, ist es wichtig, die Unterschiede zu verstehen. Es ist auch von entscheidender Bedeutung, wenn Sie sich für ein SQL-Vorstellungsgespräch bewerben: Der Unterschied zwischen INNER JOIN und OUTER JOIN gehört zu den am häufigsten gestellten Fragen in SQL-Vorstellungsgesprächen.

Um Ihr Wissen über JOINs aufzufrischen, empfehle ich Ihnen unseren interaktiven KursSQL-JOINs . Sie werden 93 praktische Übungen finden, die alle verschiedenen Anwendungsfälle von INNER JOIN vs. OUTER JOIN abdecken. Außerdem lernen Sie, wie man Daten mit verschiedenen JOIN Varianten richtig filtert und wie man Tabellen mit Nicht-Schlüsselspalten kombiniert.

Was ist ein JOIN in SQL?

Beginnen wir mit einem Überblick über ein grundlegendes SQL JOIN.

Stellen Sie sich vor, Sie haben eine Universitätsdatenbank mit den Tabellen student und lecturer. In der Tabelle student gibt es das optionale Feld advisor_id, in dem die ID des Dozenten gespeichert wird, der der Betreuer der Abschlussarbeit des Studenten ist. Ein Student kann keinen Betreuer haben, wenn er noch nicht an seiner Abschlussarbeit schreibt.

Um die Namen der Studenten und ihrer Betreuer anzuzeigen, verwenden wir die Anweisung JOIN:

SELECT
  student.full_name AS student_name,
  lecturer.full_name AS advisor_name
FROM student
JOIN lecturer
ON student.advisor_id = lecturer.id;

Die resultierenden Daten könnten wie folgt aussehen:

student_nameadvisor_name
Alice JohnsonAmina Patel
Michael SmithSantiago Rivera
Bob SmithJessica Martinez
Charlie BrownJessica Martinez

Die Anweisung JOIN kommt nach der Klausel FROM: Sie geben den Namen der ersten Tabelle nach FROM ein, dann das Schlüsselwort JOIN, dann den Namen der anderen Tabelle, gefolgt von dem Schlüsselwort ON und der Bedingung JOIN. In unserem Fall ist die JOIN Bedingung student.advisor_id = lecturer.id.

Diese Abfrage gibt Zeilen zurück, in denen die advisor_id in der student Tabelle mit der id in der lecturer Tabelle übereinstimmt. Sie gibt im Wesentlichen die Namen der Studenten zusammen mit den Namen ihrer Betreuer zurück.

Für weitere Informationen über alle Arten von JOINs empfehlen wir Ihnen, unser SQL JOIN Cheat Sheet als Lesezeichen zu speichern oder auszudrucken.

Was ist ein INNER JOIN?

Wenn Sie das Schlüsselwort JOIN in SQL verwenden, führen Sie eigentlich einen INNER JOIN durch. INNER JOIN gibt alle Kombinationen von Zeilen aus den beiden Tabellen zurück, die die ON-Bedingung erfüllen. In unserem Beispiel wurden die Namen der Studenten und ihrer Betreuer zurückgegeben.

Eine INNER JOIN reicht jedoch nicht aus, wenn Sie Zeilen einbeziehen wollen, die in der anderen Tabelle keine Übereinstimmung haben. Sie möchten zum Beispiel die Namen aller Studenten anzeigen, auch die derjenigen, die noch keinen Betreuer haben. Oder Sie möchten die Namen aller Dozenten anzeigen, auch die derjenigen, die keine Studenten betreuen. In diesem Fall kommt OUTER JOIN ins Spiel.

Was ist ein OUTER JOIN?

Ein OUTER JOIN ist die Art von JOIN, die die übereinstimmenden Zeilen aus den beiden Tabellen plus alle nicht übereinstimmenden Zeilen aus einer (oder manchmal beiden) der Tabellen zurückgibt. OUTER JOIN hat drei Varianten: LEFT OUTER JOIN, RIGHT OUTER JOIN, und FULL OUTER JOIN. Schauen wir uns jede von ihnen an.

LINKE ÄUSSERE VERKNÜPFUNG

LEFT OUTER JOIN (oder einfach LEFT JOIN) gibt alle Zeilen der linken Tabelle (die Tabelle links von der JOIN -Anweisung, d. h. unmittelbar nach FROM) mit übereinstimmenden Daten aus der rechten Tabelle (die Tabelle rechts von (d. h. unmittelbar nach) der JOIN -Anweisung) zurück. Wenn es keine Übereinstimmung gibt, werden die von der rechten Tabelle kommenden Spalten mit NULL gefüllt.

Durch die Verwendung der student und lecturer Tabellen als Beispiel können wir LEFT JOIN verwenden, um eine Liste aller Studenten mit den Daten ihres Beraters zu erhalten. Wir möchten alle Studenten einbeziehen, auch diejenigen, die noch keinen Berater haben. Die Abfrage würde wie folgt aussehen:

SELECT
  student.full_name AS student_name,
  lecturer.full_name AS advisor_name
FROM student
LEFT JOIN lecturer
ON student.advisor_id = lecturer.id;

Die Ergebnisse sind:

student_nameadvisor_name
Alice JohnsonAmina Patel
Michael SmithSantiago Rivera
Bob SmithJessica Martinez
Charlie BrownJessica Martinez
Diana PrinceNULL

In den Ergebnissen sehen wir eine Zeile, die vorher nicht enthalten war. Die Studentin Diana Prince hat keinen Betreuer, daher wurde sie nicht in das Ergebnis der Abfrage INNER JOIN aufgenommen. Mit LEFT JOIN ist sie jedoch enthalten. LEFT JOIN enthält alle Zeilen aus der linken Tabelle, auch diejenigen, die keine entsprechende Zeile in der rechten Tabelle haben. Die Spalten, die aus der lecturer Tabelle stammen, werden als NULL angezeigt.

Lesen Sie diesen Artikel über LEFT OUTER JOINs in SQL, wenn Sie weitere Informationen benötigen.

RIGHT OUTER JOIN

RIGHT OUTER JOIN (oder einfach RIGHT JOIN) gibt alle Zeilen der rechten Tabelle (der zweiten Tabelle) mit übereinstimmenden Daten aus der linken Tabelle (der ersten Tabelle) zurück. Wenn es keine Übereinstimmung gibt, werden die Spalten aus der linken Tabelle mit Nullen gefüllt.

Angenommen, wir möchten die Dozenten mit den Daten der von ihnen betreuten Studenten auflisten. Wir möchten alle Dozenten einbeziehen, auch diejenigen, die keine Studenten betreuen. Wir würden also eine Abfrage wie die folgende schreiben:

SELECT
  student.full_name AS student_name,
  lecturer.full_name AS lecturer_name
FROM student
RIGHT JOIN lecturer
ON student.advisor_id = lecturer.id;

Das Ergebnis dieser Abfrage ist:

student_namelecturer_name
Alice JohnsonAmina Patel
Michael SmithSantiago Rivera
Bob SmithJessica Martinez
Charlie BrownJessica Martinez
NULLKeiko Tanaka
NULLJamal Al-Fayed
NULLNadia Kowalski

Die Verwendung von RIGHT JOIN in der Abfrage ermöglicht es uns, eine Liste aller Dozenten zu erhalten, unabhängig davon, ob sie Studenten zugewiesen sind oder nicht. Wenn ein Dozent einem Studenten zugewiesen ist, wird er mit dem Namen des Studenten aufgeführt. Wenn ein Dozent keinem Studenten zugeordnet ist, lauten die Studentendaten in der Ergebnismenge NULL.

In diesem vollständigen Leitfaden zu SQL-Joins finden Sie alle Ressourcen, die Sie benötigen, um dieses Thema vollständig zu verstehen.

VOLLSTÄNDIGE ÄUSSERE VERKNÜPFUNG

FULL OUTER JOIN (oder einfach FULL JOIN) ermöglicht es uns, alle Daten aus beiden Tabellen zu erhalten, unabhängig davon, ob es eine Übereinstimmung zwischen ihren Zeilen gibt oder nicht. In unserem Beispiel ist die Verwendung von FULL JOIN zwischen student und lecturer alle Studenten und alle Dozenten zurück. Die Abfrage würde wie folgt aussehen:

SELECT
  student.full_name AS student_name,
  lecturer.full_name AS advisor_name
FROM student
FULL JOIN lecturer
ON student.advisor_id = lecturer.id;

Und die Ergebnisse wären:

student_nameadvisor_name
Alice JohnsonAmina Patel
Michael SmithSantiago Rivera
Bob SmithJessica Martinez
Charlie BrownJessica Martinez
Diana PrinceNULL
NULLKeiko Tanaka
NULLJamal Al-Fayed
NULLNadia Kowalski

Im Ergebnis sehen Sie alle Studenten und alle Dozenten. Wenn ein Student keinen Betreuer hat, sind die Daten des Betreuers NULL. Wenn ein Dozent keinem Studenten zugewiesen ist, sind die entsprechenden Studentendaten NULL.

Finden Sie weitere Beispiele und stellen Sie Ihr Wissen mit diesen 12 SQL JOIN Übungsfragen auf die Probe.

Es gibt einige relationale Datenbankmanagementsysteme (RDBMS), wie MySQL und MariaDB, die FULL JOIN nicht unterstützen. Sie können in diesen DBMS das gleiche Ergebnis erzielen, aber die Abfrage ist etwas länger.

Um eine FULL JOIN in den SQL-Versionen zu erstellen, die diesen Befehl nicht unterstützen, müssen Sie UNION zwischen INNER JOIN, LEFT JOIN und RIGHT JOIN verwenden:

SELECT
  student.full_name AS student_name,
  lecturer.full_name AS advisor_name
FROM student
LEFT JOIN lecturer
ON student.advisor_id = lecturer.id

UNION
SELECT
  student.full_name AS student_name,
  lecturer.full_name AS advisor_name
FROM student
JOIN lecturer
ON student.advisor_id = lecturer.id

SELECT
  student.full_name AS student_name,
  lecturer.full_name AS advisor_name
FROM student
RIGHT JOIN lecturer
ON student.advisor_id = lecturer.id;

Im obigen Skript führt die Vereinigung der drei Formen von JOIN - LEFT JOIN, INNER JOIN und RIGHT JOIN - zu denselben Daten wie ein FULL JOIN in den RDBMS, die diesen Befehl unterstützen.

Wenn Sie das Gefühl haben, dass Sie SQL-JOINs beherrschen, lesen Sie diese Fragen und Antworten zu SQL JOIN, um zu prüfen, ob Sie für ein Vorstellungsgespräch bereit sind.

Zusammenfassung von INNER JOIN vs. OUTER JOIN

Wir können das, was wir über INNER JOIN und OUTER JOIN gelernt haben, in der folgenden Tabelle zusammenfassen:

 

INNER JOIN

OUTER JOIN

Erläuterung

Gibt Zeilen aus den beiden Tabellen zurück, bei denen die ON-Bedingung erfüllt ist

Gibt Zeilen aus den beiden Tabellen zurück, bei denen die ON-Bedingung erfüllt ist, UND auch die nicht übereinstimmenden Datensätze aus einer oder beiden Tabellen, wobei mit Nullen aufgefüllt wird, wo keine Übereinstimmungen vorhanden sind.

Typen

1 typ: JOIN

3 verschiedene Typen: LEFT JOIN, RIGHT JOIN, FULL JOIN

Abkürzung

JOIN = INNER JOIN

LEFT JOIN = LEFT OUTER JOIN
RIGHT JOIN = RIGHT OUTER JOIN
FULL JOIN = FULL OUTER JOIN

Beispiel

SELECT
  student.full_name,
  lecturer.full_name
FROM student
JOIN lecturer
ON student.advisor_id = lecturer.id;

SELECT

  student.full_name,
  lecturer.full_name
FROM student
LEFT JOIN lecturer
ON student.advisor_id = lecturer.id;

Weitere Einzelheiten finden Sie in dieser Liste mit sieben SQL JOIN-Beispielen mit Erläuterungen.

Wo Sie mehr über INNER JOIN und OUTER JOIN erfahren können

Da Sie nun die Unterschiede zwischen INNER JOIN und OUTER JOIN kennen, können Sie genaue Abfragen schreiben, die zuverlässige und präzise Informationen generieren. Mit etwas Übung werden Sie in der Lage sein, jede SQL-Interview-Frage nach den Unterschieden zwischen INNER JOIN und OUTER JOIN zu beantworten.

Bevor Sie loslegen, empfehle ich Ihnen unseren SQL-JOINs Kurs, wenn Sie Ihr Wissen vertiefen möchten. Am Ende des Kurses werden Sie die verschiedenen Möglichkeiten kennen, um kombinierte Daten aus mehreren Tabellen zu erhalten. Und Sie werden verstehen, wie Sie die beste Option für jedes Szenario auswählen.

Jetzt sind Sie an der Reihe, sich über die Unterschiede zwischen INNER JOIN und OUTER JOIN zu informieren. Viel Spaß beim Lernen!