SQL-JOINs erklärt: INNER JOIN und LEFT JOIN
Kurzantwort
Ein JOIN verbindet in SQL Daten aus mehreren Tabellen zu einem gemeinsamen Ergebnis, meist über den Fremdschlüssel. Der INNER JOIN liefert nur Zeilen, zu denen es in beiden Tabellen einen Treffer gibt. Der LEFT JOIN gibt zusätzlich alle Zeilen der linken Tabelle zurück, auch ohne Partner. So führt man Daten wieder zusammen, die durch die Normalisierung auf mehrere Tabellen verteilt wurden.
Teil des Lernpfads Datenbanken und SQL · Schritt 5 von 9
Die Normalisierung verteilt Daten sinnvoll auf mehrere Tabellen – aber für eine Auswertung will man sie oft wieder zusammen sehen. Genau das leistet der JOIN: Er führt Tabellen in einer Abfrage zusammen. Für Fachinformatiker:innen ist er tägliches Werkzeug und beliebter Prüfungsstoff.
Was ist ein JOIN?
Ein JOIN verbindet in einer SQL-Abfrage die Zeilen mehrerer Tabellen zu einem gemeinsamen Ergebnis. Die Verbindung läuft über eine Bedingung – meist gehört ein Fremdschlüssel der einen Tabelle zum Primärschlüssel der anderen.
Nehmen wir zwei Tabellen: azubis (mit einer klassen_id als Fremdschlüssel) und klassen.
INNER JOIN: nur die Treffer
Der INNER JOIN liefert nur die Zeilen, zu denen es in beiden Tabellen einen passenden Partner gibt.
SELECT azubis.name, klassen.bezeichnung
FROM azubis
INNER JOIN klassen ON azubis.klassen_id = klassen.id;Das Ergebnis enthält jeden Azubi zusammen mit seiner Klasse – aber nur, wenn die Klasse existiert. Ein Azubi ohne gültige Klasse taucht nicht auf, eine Klasse ohne Azubis ebenso wenig.
LEFT JOIN: alle von links
Der LEFT JOIN gibt alle Zeilen der linken Tabelle zurück – auch die ohne Partner rechts. Fehlt der Partner, stehen dort leere Werte (NULL).
SELECT azubis.name, klassen.bezeichnung
FROM azubis
LEFT JOIN klassen ON azubis.klassen_id = klassen.id;Jetzt erscheint jeder Azubi – und wer noch keiner Klasse zugeordnet ist, steht mit leerem Klassenfeld da. Das ist ideal, um genau solche Lücken zu finden.
Die Join-Typen im Überblick
| Join-Typ | Liefert |
|---|---|
| INNER JOIN | nur Zeilen mit Treffer in beiden Tabellen |
| LEFT JOIN | alle aus der linken Tabelle, plus Treffer rechts |
| RIGHT JOIN | alle aus der rechten Tabelle, plus Treffer links |
| FULL JOIN | alle Zeilen aus beiden Tabellen |
Selbstkontrolle
Selbstkontrolle
Du willst alle Azubis auflisten, auch die, die noch keiner Klasse zugeordnet sind. Welcher Join passt?
Häufige Fragen
Wozu braucht man überhaupt Joins?
Weil normalisierte Datenbanken zusammengehörige Daten auf mehrere Tabellen verteilen, um Redundanz zu vermeiden. Für eine Auswertung will man sie aber oft gemeinsam sehen. Der JOIN führt die Tabellen in der Abfrage wieder zusammen, ohne die Daten dauerhaft zu vermischen.
Was bedeutet die ON-Bedingung?
Die ON-Bedingung legt fest, welche Zeilen der Tabellen als zusammengehörig gelten. Meist vergleicht sie den Fremdschlüssel der einen mit dem Primärschlüssel der anderen Tabelle. Ohne diese Bedingung wüsste die Datenbank nicht, welche Zeilen sie verbinden soll, und würde jede mit jeder kombinieren.
Was ist der Unterschied zwischen LEFT und RIGHT JOIN?
Beide behalten alle Zeilen einer Seite, auch ohne Partner. Der LEFT JOIN behält alle Zeilen der zuerst genannten, linken Tabelle, der RIGHT JOIN alle der zweiten, rechten. In der Praxis nutzt man fast immer den LEFT JOIN und dreht bei Bedarf die Reihenfolge der Tabellen um.
Kann man mehr als zwei Tabellen verbinden?
Ja. Man reiht mehrere JOINs aneinander und verbindet so drei oder mehr Tabellen in einer Abfrage. Jede Verbindung braucht ihre eigene ON-Bedingung. So lassen sich auch komplexe Auswertungen über viele zusammenhängende Tabellen hinweg formulieren.
Weiterlesen: SQL-Grundlagen: Daten mit SELECT abfragen · DDL und DML: SQL-Befehle im Überblick · ER-Modell erklärt: Entity-Relationship-Modell · Transaktionen und das ACID-Prinzip
Das Wichtigste in Kürze
- Ein JOIN verbindet mehrere Tabellen in einer Abfrage, meist über den Fremdschlüssel.
- Die ON-Bedingung legt fest, welche Zeilen zusammengehören.
- INNER JOIN: nur Zeilen mit Treffer in beiden Tabellen.
- LEFT JOIN: alle Zeilen der linken Tabelle, auch ohne Partner.