Führe jeden SQL Join direkt in deinem Browser auf zwei kleinen Beispieltabellen aus und sieh, welche Zeilen übrig bleiben, mit PostgreSQL-Syntax für INNER, LEFT, RIGHT, FULL, CROSS und Self Joins.
Ein Join kombiniert Zeilen aus zwei Tabellen anhand einer Bedingung, meist über passende Schlüssel. INNER JOIN behält nur Zeilen, die auf beiden Seiten passen. LEFT JOIN behält jede Zeile der linken Tabelle und füllt fehlende Spalten der rechten mit NULL, RIGHT JOIN macht es umgekehrt, FULL JOIN behält beide Seiten, und CROSS JOIN kombiniert jede Zeile mit jeder Zeile.
Welche Zeilen jeder Join behält
Venn-Diagramme sind der übliche Weg, Joins zu erklären, aber sie verbergen genau das, was wirklich wehtut: doppelte Zeilen und NULLs. Unten findest du zwei winzige Tabellen, customers und orders, mit einer Kundin, die nie bestellt hat, und einer Bestellung, deren Kunde gelöscht wurde. Wähle einen Join, und das Ergebnis wird in deinem Browser berechnet, sodass du genau siehst, welche Zeilen erscheinen und warum.
INNER JOIN verwirft Zeilen ohne Treffer. LEFT JOIN behält jede Zeile der ersten Tabelle und setzt NULL in die Spalten der zweiten Tabelle, wenn nichts passt. In der Demo erscheint Cleo im LEFT JOIN mit leerer Bestellung und fehlt im INNER JOIN.
Ja. In PostgreSQL ist das Wort INNER optional, und ein einfaches JOIN ist ein Inner Join. Auch das Wort OUTER ist optional, LEFT JOIN und LEFT OUTER JOIN bedeuten also dasselbe.
Jede linke Zeile erscheint einmal pro passender rechter Zeile. Ein Kunde mit drei Bestellungen taucht dreimal auf. Das ist korrektes Verhalten; aggregiere mit GROUP BY oder joine eine vorab gruppierte Unterabfrage, wenn du eine Zeile pro Kunde brauchst.
Eine Tabelle, die unter zwei Aliasen mit sich selbst gejoint wird. Man nutzt ihn, wenn Zeilen auf andere Zeilen derselben Tabelle verweisen, etwa Mitarbeitende und ihre Vorgesetzten oder Kunden und wer sie geworben hat.
PostgreSQL schon, und das ist die hier gezeigte Syntax. MySQL hat kein Schlüsselwort FULL JOIN; der übliche Workaround ist ein LEFT JOIN, der per UNION mit einem RIGHT JOIN kombiniert wird.
Füge das in psql oder einen beliebigen SQL-Editor für Postgres ein, um die Beispieltabellen nachzubauen, und führe dann die Abfragen aus der Demo aus.
Bestellung 104 verweist absichtlich auf Kunde 9, den es nicht gibt, damit die Outer Joins etwas zu zeigen haben.
Der LEFT JOIN behält Cleo mit NULL in den Bestellspalten, und der IS NULL-Filter behält nur diese Zeilen.
In der Demo verwendete Beispieltabellen
Join-Art
Ergebnis: {n} Zeilen
Hervorgehobene Zellen wurden vom Outer Join mit NULL aufgefüllt.
SELF
Kostenlos starten · Keine Kreditkarte nötig