| Typ | Konzept |
|---|---|
| Quellen | Quelle - SQL Outer Join Quelle - Recherche - SQL-Joins 2026 |
| Erstellt | 2026-09-27 |
| Aktualisiert | 2026-09-27 |
| Tags | sql, datenbank, join |
Ein Join verbindet die Zeilen zweier Tabellen über eine Bedingung, meist gleiche Werte in einer gemeinsamen Spalte. Der Inner Join liefert nur Zeilen mit Partner. Die Outer Joins (Left, Right, Full) behalten zusätzlich die Zeilen ohne Partner und füllen die fehlenden Spalten mit NULL.
Das Beispiel
Alle Beispiele verwenden dieselben zwei Tabellen und verbinden sie über die gemeinsame Spalte B (Quelle - SQL Outer Join):
| R A | B |
|---|---|
| a1 | b1 |
| a1 | b2 |
| a2 | b3 |
| S B | C |
|---|---|
| b1 | c1 |
| b3 | c1 |
| b3 | c2 |
| b4 | c2 |
| b5 | c3 |
Passend sind b1 (einmal in S) und b3 (zweimal in S). b2 gibt es nur in R, b4 und b5 nur in S.
Die Join-Arten
Inner Join: nur Zeilen mit Partner
SELECT * FROM R INNER JOIN S ON R.B = S.B; -- INNER darf fehlen: R JOIN S
| A | B | C |
|---|---|---|
| a1 | b1 | c1 |
| a2 | b3 | c1 |
| a2 | b3 | c2 |
Diese Tabelle steht nicht in der Quelle, sie folgt aus der Definition: „Für jede Zeile von T1 eine Zeile für jede Zeile in T2, welche die Bedingung erfüllt“ (Quelle - Recherche - SQL-Joins 2026). Sie ist genau der gemeinsame Teil der drei Outer-Join-Ergebnisse unten.
Left Outer Join: alle Zeilen der linken Tabelle
SELECT * FROM R LEFT OUTER JOIN S ON R.B = S.B;
| A | B | C |
|---|---|---|
| a1 | b1 | c1 |
| a1 | b2 | NULL |
| a2 | b3 | c1 |
| a2 | b3 | c2 |
b2 kommt in S nicht vor, deshalb bekommt die Zeile NULL in C (Quelle - SQL Outer Join).
Right Outer Join: alle Zeilen der rechten Tabelle
SELECT * FROM R RIGHT OUTER JOIN S ON R.B = S.B;
| A | B | C |
|---|---|---|
| a1 | b1 | c1 |
| a2 | b3 | c1 |
| a2 | b3 | c2 |
| NULL | b4 | c2 |
| NULL | b5 | c3 |
b4 und b5 kommen in R nicht vor, deshalb bekommen diese Zeilen NULL in A (Quelle - SQL Outer Join).
Full Outer Join: alle Zeilen beider Tabellen
SELECT * FROM R FULL OUTER JOIN S ON R.B = S.B;
| A | B | C |
|---|---|---|
| a1 | b1 | c1 |
| a1 | b2 | NULL |
| a2 | b3 | c1 |
| a2 | b3 | c2 |
| NULL | b4 | c2 |
| NULL | b5 | c3 |
Übersicht
| Join | Zeilen im Beispiel | behält Zeilen ohne Partner aus … |
|---|---|---|
| Inner | 3 | keiner Tabelle |
| Left Outer | 4 | der linken Tabelle (R) |
| Right Outer | 5 | der rechten Tabelle (S) |
| Full Outer | 6 | beiden Tabellen |
| Cross | 3 · 5 = 15 | (keine Bedingung, jede mit jeder) |
Merksatz: Ein Outer Join ist zuerst ein Inner Join. Danach werden die Zeilen ohne Partner ergänzt, und ihre fehlenden Spalten werden mit NULL gefüllt (Quelle - Recherche - SQL-Joins 2026, PostgreSQL-Doku).
Weitere Begriffe
- NULL heisst „kein Wert vorhanden“. Im Beispiel markiert NULL die Zeilen, die keinen Join-Partner haben.
- Cross Join bildet das kartesische Produkt: Jede Zeile wird mit jeder kombiniert, aus N und M Zeilen werden N · M.
FROM R, Sbedeutet dasselbe. - Vervielfachung: Die Zeile (a2, b3) steht zweimal im Ergebnis, weil b3 in S zweimal vorkommt. Ein Join kann ein Ergebnis also grösser machen als beide Tabellen.
INNERundOUTERsind optional:JOIN= Inner Join,LEFT JOIN=LEFT OUTER JOIN.
Die Join-Bedingung: ON, USING, NATURAL
| Form | Bedeutung |
|---|---|
ON R.B = S.B |
allgemeinste Form, beliebige Bedingung wie in WHERE; B steht zweimal im Ergebnis (R.B und S.B) |
USING (B) |
Kurzform für gleichnamige Spalten, B erscheint nur einmal |
NATURAL JOIN |
verbindet automatisch über alle gleichnamigen Spalten, B erscheint nur einmal |
NATURAL gilt als riskant: Kommt später in einer Tabelle eine weitere gleichnamige Spalte dazu (etwa name), wird sie stillschweigend mitverglichen. USING ist davor sicher (PostgreSQL-Doku, Quelle - Recherche - SQL-Joins 2026).
In Quelle - SQL Outer Join stehen die Abfragen ohne Bedingung, z.B. SELECT * FROM R LEFT OUTER JOIN S. Laut PostgreSQL- und MySQL-Doku muss ein Outer Join aber ON, USING oder NATURAL haben (Quelle - Recherche - SQL-Joins 2026). Die Ergebnistabellen der Quelle entsprechen R NATURAL LEFT OUTER JOIN S bzw. USING (B), also dem Verbund über die gemeinsame Spalte B.
Unterschiede zwischen Datenbanken
- MySQL kennt keinen FULL OUTER JOIN, nur LEFT und RIGHT (Quelle - Recherche - SQL-Joins 2026).
- Die MySQL-Doku empfiehlt, LEFT JOIN statt RIGHT JOIN zu verwenden, damit der Code portabel bleibt. Ein Right Join lässt sich immer als Left Join mit vertauschten Tabellen schreiben:
S LEFT JOIN Rliefert dieselben Zeilen wieR RIGHT JOIN S.
In MySQL erhält man einen Full Outer Join, indem man einen Left und einen Right Join mit UNION verbindet: SELECT … FROM R LEFT JOIN S ON R.B = S.B UNION SELECT … FROM R RIGHT JOIN S ON R.B = S.B. UNION entfernt dabei doppelte Zeilen, allerdings auch solche, die schon in den Tabellen doppelt waren.
Venn-Diagramme: anschaulich, aber ungenau
Joins werden oft mit zwei überlappenden Kreisen erklärt: Der Inner Join ist die Schnittmenge, der Left Join der ganze linke Kreis. Populär gemacht hat das Jeff Atwood 2007, der selbst einräumte, dass die Bilder nicht ganz zur Syntax passen und sich der Cross Join so nicht darstellen lässt. Lukas Eder hält 2016 dagegen: „Ein Join ist immer ein Kreuzprodukt mit einer Bedingung, eventuell plus eine Vereinigung“, keine Mengenoperation. Die Kreise verschweigen zum Beispiel, dass eine Zeile mehrere Partner haben kann (a2/b3 oben) (Quelle - Recherche - SQL-Joins 2026).
Die handgezeichneten Tabellen mit eingekreisten B-Werten in Quelle - SQL Outer Join entsprechen eher Eders Vorschlag: Man sieht, welche Zeilenpaare zusammenpassen und welche übrig bleiben. Als Eselsbrücke für „welche Seite bleibt vollständig“ sind die Kreise trotzdem brauchbar, ähnlich wie die Venn-Diagramme bei Boolesche Algebra.
Zum Weiterlernen
- W3Schools: SQL Joins – englisch, sehr knapp, Abfragen direkt im Browser ausprobieren
- simpleclub: SQL Joins einfach erklärt – deutsch, auch Cross, Natural und Self Join
- Coding Horror: A Visual Explanation of SQL Joins – Venn-Diagramme
- jOOQ: Say NO to Venn Diagrams When Explaining JOINs – die Kritik daran
- PostgreSQL-Doku, Kap. 7.2.1.1 – die genaue Referenz
Verwandt
- SQL – die Abfragesprache, zu der Joins gehören
- Boolesche Algebra – Venn-Diagramme und Mengen, als Bild für Joins nur bedingt passend
- Quelle - SQL Outer Join – die Lehrbuchseite mit den Beispielen
