Zurück zur Artikelliste Artikel
9 Leseminuten

Was sind die verschiedenen SQL JOIN-Typen?

Die Bedeutung des JOIN beim Erlernen von SQL kann gar nicht hoch genug eingeschätzt werden. Es handelt sich nicht nur um eine der grundlegendsten Operationen in relationalen Datenbanken, sondern auch um eine sehr vielseitige Funktion mit vielen verschiedenen Typen. Auch wenn der SQL JOIN anfangs einschüchternd wirken mag, wird er zu einem sehr nützlichen Instrument in Ihrem Arsenal, sobald Sie ihn verstanden haben. Lassen Sie uns alle SQL JOIN-Typen erkunden!

Wir können mit Sicherheit sagen, dass die Operation JOIN eine der mächtigsten Funktionen von SQL ist. Alle nicht-relationalen DBMS (Datenbankverwaltungssysteme) beneiden sie darum - es handelt sich um ein sehr einfaches Konzept, das jedoch in Fällen, in denen zwei Datensätze miteinander verknüpft werden, weit verbreitet ist.

Kurz gesagt, JOIN ist eine Operation, bei der Tabellen Zeile für Zeile miteinander verglichen werden. Mit diesem Vergleich können Sie Spalten aus jeder Tabelle ausgeben, die an JOIN beteiligt ist.

Ein guter Ort für Übungen nach dem Lesen dieses Artikels ist unser interaktiver SQL-JOINs Kurs. Er bietet über 90 praktische Übungen zu verschiedenen Arten von Joins, die hier besprochen werden.

Lassen Sie uns nun 2 Tabellen erstellen, um die Kunst der JOIN zu erforschen und zu beherrschen. Unsere erste Tabelle, employeesbesteht aus 5 Spalten:

  • id - Die eindeutige ID des Mitarbeiters.
  • name - Der Name des Mitarbeiters.
  • specialization - Die Spezialisierung des Mitarbeiters im Unternehmen.
  • coach_id - Die ID des Coaches/Mentors des Mitarbeiters. Dies ist ein anderer Mitarbeiter eines Unternehmens.
  • project_id - Die ID des aktuellen Projekts, an dem der Mitarbeiter beteiligt ist.
idnamespecializationcoach_idproject_id
1Olli WoodwardDeveloper41
2Pete NolanManagerNULL1
3Will BarkerIT Support43
4Uma NormanDeveloperNULL4
5Peggy BergManager24
6Mary SheltonAnalystNULLNULL

Die zweite Tabelle ist projects. Sie enthält 3 Spalten:

  • id - Die eindeutige ID des Projekts.
  • name - Der Name des Projekts.
  • is_external - Ein boolescher Wert, der angibt, ob es sich um ein externes oder internes Projekt handelt.
idnameis_external
1Website UI/UX DesignTRUE
2Research & DevelopmentFALSE
3SupportFALSE
4Database Architecture DesignTRUE

Beachten Sie, dass es eine logische Verbindung zwischen den beiden Tabellen gibt. Die project_id in employees entspricht der id von projects. Die entsprechenden Werte in den Tabellen sind zur besseren Darstellung farblich kodiert.

Nun, da wir die Tabellen haben, können wir zur Sache kommen!

INNER JOIN (auch bekannt als JOIN)

Der erste der SQL-JOIN-Typen ist INNER JOIN. Wenn Sie in Ihrem SQL-Code "JOIN" eingeben, wird INNER JOIN verwendet. Es schadet zwar nicht, aber Sie müssen in Ihren Abfragen nicht INNER schreiben.

Ein ON Schlüsselwort folgt allen JOINs in SQL. Es zeigt den Beginn der Verbindungsbedingung an. INNER JOINs JOIN gibt wie alle anderen JOINs nur die Zeilen aus, die die Verbindungsbedingung erfüllen.

Bevor wir fortfahren, sollten Sie beachten, dass der JOIN Operator nicht die einzige Möglichkeit ist, Daten aus zwei Tabellen zu verbinden. Sie können auch WHERE verwenden. Möchten Sie mehr darüber erfahren? Wir haben genau den richtigen Artikel für Sie!

Aber lassen wir die Theorie für einen Moment beiseite und machen wir uns an die Codierung. Benutzen wir unsere beiden Tabellen und eine INNER JOIN, um herauszufinden, welcher Mitarbeiter an welchem Projekt arbeitet:

SELECT
 employees.name as employee,
 specialization,
 projects.name as project
FROM employees
JOIN projects
 ON employees.project_id = projects.id

Bevor wir uns das Ergebnis dieser Abfrage ansehen, sollten wir die Abfrage selbst analysieren. Wie Sie sehen, fügen wir die beiden Tabellen mit JOIN zusammen. Nach JOIN geben wir den Operator ON und die Bedingung für die Verknüpfung an.

Wir haben also die Tabellen anhand der Bedingung verbunden, dass project_id aus der Tabelle employees gleich der ID aus der Tabelle projects. Schauen wir uns nun das Ergebnis der Abfrage an:

employeespecializationproject
Olli WoodwardDeveloperWebsite UI/UX Design
Pete NolanManagerWebsite UI/UX Design
Will BarkerIT SupportSupport
Uma NormanDeveloperDatabase Architecture Design
Peggy BergManagerDatabase Architecture Design

Wir sehen, dass Olli Woodward und Pete Nolan ein Projekt "Website UI/UX Design" haben. Ihr project_id ist gleich 1, was die ID dieses Projekts in der Tabelle ist projects. Das Gleiche gilt für die anderen Zeilen im Ergebnis.

Allerdings sehen wir Mary Shelton hier nicht. Ihre project_id ist NULL, und es gibt kein Projekt mit der ID NULL. Ebenso hat das Projekt "Forschung & Entwicklung" die ID 2, aber kein Mitarbeiter hat die project_id gleich 2.

Haben wir Ihr Interesse an INNER JOIN geweckt und möchten Sie mehr über die Feinheiten erfahren? Werfen Sie einen Blick auf unseren Artikel speziell über den INNER JOIN!

LEFT OUTER JOIN

Der LEFT OUTER JOIN ist einer der äußeren SQL JOIN-Typen. Das Schlüsselwort OUTER ist optional und wird oft weggelassen, so dass nur der Operator LEFT JOIN zur Verfügung steht.

Der allgemeine Unterschied zwischen OUTER JOIN und INNER JOIN besteht darin, dass der OUTER JOIN nicht nur die Zeilen einschließt, die die Verbindungsbedingung erfüllen, sondern auch die Zeilen, die die Bedingung nicht erfüllen, aus einer (oder mehreren) der Tabellen.

Um auf den LEFT OUTER JOIN zurückzukommen: Er schließt die Zeilen ein, die die Verbindungsbedingung erfüllen (genau wie der INNER JOIN) und alle anderen Zeilen der linken (oder ersten) Tabelle. Verwenden wir unser früheres Beispiel, indem wir JOIN in LEFT JOIN ändern, um den Unterschied zu sehen:

SELECT
 employees.name as employee,
 specialization,
 projects.name as project
FROM employees
LEFT JOIN projects
 ON employees.project_id = projects.id

Und hier ist das Ergebnis der Abfrage:

employeespecializationproject
Olli WoodwardDeveloperWebsite UI/UX Design
Pete NolanManagerWebsite UI/UX Design
Will BarkerIT SupportSupport
Uma NormanDeveloperDatabase Architecture Design
Peggy BergManagerDatabase Architecture Design
Mary SheltonAnalystNULL

Wie Sie sehen können, wurde eine weitere Zeile hinzugefügt: Mary Shelton mit dem Projekt NULL. Diese spezielle Zeile erfüllt nicht die Bedingung employees.project_id = projects.id, da es keine Projekte mit einer NULL ID gibt. Aber diese Zeile existiert in der employees Tabelle, also wird sie dem Ergebnis hinzugefügt. Der Name des Projekts für Mary Shelton ist aus demselben Grund ein NULL Wert, da es unter den Projekten keine IDs von NULL gibt.

Jetzt haben Sie den Grundgedanken von LEFT OUTER JOIN verstanden. Sie können jedoch jederzeit unseren Artikel über LEFT OUTER JOIN lesen, um mehr darüber zu erfahren oder weitere Beispiele zu sehen!

INNER und LEFT OUTER JOINs sind die häufigsten Arten von JOIN in SQL. Üben Sie sie deshalb gründlich in unserem SQL-JOINs Kurs. Lesen Sie hier über den Kurs.

RIGHT OUTER JOIN

Der RIGHT OUTER JOIN kann als Zwillingsbruder des LEFT OUTER JOIN betrachtet werden. Der einzige Unterschied zwischen diesen beiden SQL-JOIN-Typen ist die Tabelle, aus der die Datensätze unabhängig von der Bedingung JOIN entnommen werden. Beim LEFT OUTER JOIN ist dies die erste oder linke Tabelle, beim RIGHT OUTER JOIN die zweite oder rechte Tabelle.

Nehmen wir das vorherige Beispiel, aber ändern wir LEFT JOIN in RIGHT JOIN:

SELECT
 employees.name as employee,
 specialization,
 projects.name as project
FROM employees
RIGHT JOIN projects
 ON employees.project_id = projects.id

Lassen Sie uns nun das Ergebnis der Abfrage analysieren:

employeespecializationproject
Olli WoodwardDeveloperWebsite UI/UX Design
Pete NolanManagerWebsite UI/UX Design
Will BarkerIT SupportSupport
Uma NormanDeveloperDatabase Architecture Design
Peggy BergManagerDatabase Architecture Design
NULLNULLResearch & Development

Wie wir sehen können, ist der Datensatz von Mary Shelton jetzt verschwunden. Er erfüllt weder die Bedingung ON, noch gehört er zur rechten Tabelle. Daher wird er hier nicht in das Ergebnis aufgenommen.

Andererseits erhalten wir hier nun das Projekt "Forschung & Entwicklung". Es erfüllt die Bedingung JOIN nicht, ist aber in der rechten Tabelle vorhanden, so dass es in das Ergebnis aufgenommen wird. Beachten Sie, dass diese Zeile NULLs in den Spalten Mitarbeiter und specialization enthält. Das liegt daran, dass kein Datensatz in der employees kein Datensatz in der Tabelle project_id den Wert 2 hat, die ID dieses Projekts. Daher wird stattdessen ein NULL zurückgegeben.

VOLLSTÄNDIGE ÄUSSERE VERKNÜPFUNG

Die FULL OUTER JOIN, oder einfach FULL JOIN, ist der letzte Typ der OUTER JOIN. In gewisser Weise kombiniert sie sowohl LEFT als auch RIGHT OUTER JOINs.

Er enthält zwar Datensätze, die die Bedingung JOIN erfüllen, aber auch Zeilen aus beiden Tabellen, die dies nicht tun. Das heißt, eine FULL JOIN gibt alle Zeilen aus beiden Tabellen zurück. Wenn eine Zeile aus einer Tabelle keinen entsprechenden Datensatz aus der anderen Tabelle hat, werden die fehlenden Daten mit NULLs aufgefüllt.

Schauen wir uns ein Beispiel für FULL OUTER JOIN an:

SELECT
 employees.name as employee,
 specialization,
 projects.name as project
FROM employees
FULL JOIN projects
 ON employees.project_id = projects.id

Hier ist das Ergebnis:

employeespecializationproject
Olli WoodwardDeveloperWebsite UI/UX Design
Pete NolanManagerWebsite UI/UX Design
Will BarkerIT SupportSupport
Uma NormanDeveloperDatabase Architecture Design
Peggy BergManagerDatabase Architecture Design
Mary SheltonAnalystNULL
NULLNULLResearch & Development

Wie Sie sehen können, haben wir hier alle Zeilen aus beiden Tabellen. Die Zeilen, die die Bedingung erfüllen, haben die entsprechenden Daten aus beiden Tabellen. Für die Zeilen, die die Bedingung nicht erfüllen, werden die Spalten der anderen Tabelle mit NULLs gefüllt.

Wenn Sie eine zugängliche, kurze Beschreibung des FULL OUTER JOIN sowie anderer SQL JOIN-Typen wünschen, verwenden Sie unser SQL JOIN Cheat Sheet.

CROSS JOIN

Dieser SQL JOIN-Typ unterscheidet sich deutlich von den bisher in diesem Artikel erwähnten Typen. Er dient nicht nur einem anderen Zweck, sondern hat auch eine etwas andere Syntax.

Wenn er in einer Abfrage verwendet wird, gibt CROSS JOIN ein kartesisches Produkt zurück - alle möglichen Kombinationen der Zeilen aus beiden Tabellen. Alle Datensätze aus einer Tabelle werden automatisch mit allen Datensätzen aus der anderen Tabelle verknüpft.

Außerdem gibt es keine ON Bedingung. Für diese JOIN in einer Abfrage verwenden Sie einfach den CROSS JOIN Operator, ohne das ON Schlüsselwort zu verwenden.

Schauen wir uns an, wie das Ganze in einem Beispiel funktioniert:

SELECT
 employees.name as employee,
 projects.name as project
FROM employees
CROSS JOIN projects

Beachten Sie, dass wir zwei Spalten auswählen, den Namen des Mitarbeiters und den Namen des Projekts, gefolgt von CROSS JOIN. Schauen wir uns das Ergebnis an:

employeeproject
Olli WoodwardWebsite UI/UX Design
Olli WoodwardResearch & Development
Olli WoodwardSupport
Olli WoodwardDatabase Architecture Design
Pete NolanWebsite UI/UX Design
Pete NolanResearch & Development
Pete NolanSupport
Pete NolanDatabase Architecture Design
Will BarkerWebsite UI/UX Design
Will BarkerResearch & Development
Will BarkerSupport
Will BarkerDatabase Architecture Design
Uma NormanWebsite UI/UX Design
Uma NormanResearch & Development
Uma NormanSupport
Uma NormanDatabase Architecture Design
Peggy BergWebsite UI/UX Design
Peggy BergResearch & Development
Peggy BergSupport
Peggy BergDatabase Architecture Design
Mary SheltonWebsite UI/UX Design
Mary SheltonResearch & Development
Mary SheltonSupport
Mary SheltonDatabase Architecture Design

Beachten Sie die Anzahl der Zeilen, die zurückgegeben werden. Die Berechnung ist recht einfach: Anzahl der Zeilen in der ersten Tabelle * Anzahl der Zeilen in der zweiten Tabelle = Anzahl der resultierenden Zeilen. Somit ist jeder der 6 Mitarbeiter jedem der 4 Projekte zugeordnet.

Haben Sie noch Fragen zu CROSS JOIN oder möchten Sie einfach mehr darüber erfahren? Sehen Sie sich unseren illustrierten Leitfaden zum SQL CROSS JOIN an!

Üben Sie alle SQL JOIN-Typen!

Jetzt kennen Sie die verschiedenen JOIN-Typen in SQL. Dies ist eine großartige Gelegenheit, dieses neue Wissen zu vertiefen oder einfach das zu wiederholen, was Sie bereits wissen. In jedem Fall empfehle ich Ihnen unseren großartigen interaktiven SQL JOIN-Kurs. Mit über 90 praktischen Übungen bietet er die Möglichkeit, diesen grundlegenden Aspekt von SQL zu üben!