SQL Joins erklärt, mit Live-Beispielen

SQL Joins erklärt

SQL Joins erklärt: Inner, Left, Right, Full, Cross, Self | We.Inc

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.

Häufige Fragen

Was ist der Unterschied zwischen INNER JOIN und LEFT JOIN?

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.

Ist JOIN dasselbe wie 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.

Warum hat mein Join mehr Zeilen zurückgegeben, als die Tabelle hat?

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.

Was ist ein Self Join?

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.

Unterstützt MySQL FULL OUTER JOIN?

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.

ON, USING und NATURAL

Filter bei Outer Joins laufen in anderer Reihenfolge

In PostgreSQL ausprobieren

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.

Beispieltabellen

Bestellung 104 verweist absichtlich auf Kunde 9, den es nicht gibt, damit die Outer Joins etwas zu zeigen haben.

Kunden, die nie bestellt haben

Der LEFT JOIN behält Cleo mit NULL in den Bestellspalten, und der IS NULL-Filter behält nur diese Zeilen.

Join-Playground

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

Verwandt: Ratgeber

Produkt

Für wen

Funktionen

Ressourcen

Unternehmen

Sitemap