JOINs in SQL verstehen

Daten liegen oft auf mehrere Tabellen verteilt. Lerne, wie du mit INNER JOIN, LEFT JOIN und Co. zusammengehörige Datensätze sinnvoll verknüpfst.

Teilen
JOINs in SQL verstehen

In einer gut gestalteten Datenbank liegen Daten selten in einer einzigen Tabelle, sondern sind sinnvoll auf mehrere verteilt. Um sie wieder zusammenzuführen, brauchst du JOINs. In diesem Beitrag lernst du die wichtigsten Join-Typen kennen und verstehst, wann du welchen einsetzt.

Unsere zwei Beispieltabellen

Stell dir zwei Tabellen vor: kunden mit den Spalten id und name sowie bestellungen mit id, kunde_id und betrag. Die Spalte kunde_id verweist auf die id in der Kundentabelle. Diese Verbindung nennt man einen Fremdschlüssel.

Der INNER JOIN

Der häufigste Join ist der INNER JOIN. Er gibt nur die Zeilen zurück, für die es in beiden Tabellen einen passenden Eintrag gibt. Über die ON-Klausel legst du fest, welche Spalten verglichen werden.

SELECT kunden.name, bestellungen.betrag
FROM kunden
INNER JOIN bestellungen
  ON kunden.id = bestellungen.kunde_id;

Hat ein Kunde keine Bestellung, taucht er hier nicht auf, und eine Bestellung ohne gültigen Kunden ebenfalls nicht.

Der LEFT JOIN

Manchmal möchtest du alle Zeilen der linken Tabelle behalten, auch wenn es rechts keinen Treffer gibt. Dafür nutzt du den LEFT JOIN. Fehlende Werte werden mit NULL aufgefüllt.

SELECT kunden.name, bestellungen.betrag
FROM kunden
LEFT JOIN bestellungen
  ON kunden.id = bestellungen.kunde_id;

So siehst du auch Kunden ohne jede Bestellung, bei ihnen steht in der Betrag-Spalte dann NULL.

Aliase für lesbare Abfragen

Lange Tabellennamen machen Abfragen unübersichtlich. Mit Aliasen vergibst du kurze Spitznamen und sparst Tipparbeit.

SELECT k.name, b.betrag
FROM kunden AS k
LEFT JOIN bestellungen AS b
  ON k.id = b.kunde_id
WHERE b.betrag > 100;

Hier steht k für kunden und b für bestellungen. Das macht den Code deutlich kürzer.

JOINs mit Gruppierung kombinieren

Besonders mächtig werden Joins, wenn du sie mit GROUP BY und Aggregatfunktionen verbindest. So kannst du zum Beispiel den Gesamtumsatz pro Kunde berechnen.

SELECT k.name, SUM(b.betrag) AS gesamt
FROM kunden AS k
LEFT JOIN bestellungen AS b
  ON k.id = b.kunde_id
GROUP BY k.name
ORDER BY gesamt DESC;

Die Funktion SUM addiert alle Beträge pro Gruppe, und GROUP BY sorgt dafür, dass pro Kunde eine Zeile entsteht.

Weitere Join-Typen im Überblick

Neben den beiden häufigsten gibt es noch weitere Varianten, die du kennen solltest:

  • RIGHT JOIN: wie LEFT JOIN, behält aber alle Zeilen der rechten Tabelle.
  • FULL OUTER JOIN: behält alle Zeilen beider Tabellen, egal ob es einen Treffer gibt.
  • CROSS JOIN: kombiniert jede Zeile der einen mit jeder Zeile der anderen Tabelle.

In der Praxis kommst du mit INNER JOIN und LEFT JOIN aber schon sehr weit.

Fazit

JOINs sind der Schlüssel, um verteilte Daten wieder sinnvoll zusammenzuführen. Der INNER JOIN liefert nur passende Paare, der LEFT JOIN behält alle Zeilen der linken Tabelle. Mit Aliasen bleiben deine Abfragen lesbar, und in Kombination mit GROUP BY beantwortest du anspruchsvolle Fragen wie den Umsatz pro Kunde. Wenn du Joins sicher beherrschst, kannst du das volle Potenzial relationaler Datenbanken ausschöpfen.