‹ Informatik

SQL JOIN

SQL JOIN in der Informatik verständlich erklärt: Bedeutung, typische Anwendung und Beispiele für Datenbanken und SQL.

Oft steckt die Antwort auf eine Datenbankfrage nicht in einer einzigen Tabelle. Eine Bestellung kennt vielleicht nur eine Kunden-ID, der Kundenname steht aber in einer anderen Tabelle. SQL JOIN verbindet solche Tabellen wieder sinnvoll. Nach dieser Erklärung kannst du INNER JOIN und OUTER JOIN unterscheiden, einfache JOIN-Abfragen lesen und typische Denkfehler erkennen.

Deine Lernziele
  • Ich kann erklären, warum JOINs in relationalen Datenbanken gebraucht werden.
  • Ich kann eine JOIN-Bedingung mit Primär- und Fremdschlüssel deuten.
  • Ich kann INNER JOIN, LEFT JOIN und FULL OUTER JOIN grob unterscheiden.
  • Ich kann erkennen, wann eine Zwischentabelle für n:m-Beziehungen nötig ist.
  • Ich kann einfache JOIN-Abfragen mit SELECT, FROM, JOIN und ON lesen.

Warum Tabellen verbunden werden

Relationale Datenbanken verteilen Informationen auf mehrere Tabellen, damit Daten nicht unnötig doppelt gespeichert werden. Das ist sauber, aber beim Abfragen musst du die passenden Teile wieder zusammenführen.

Definition

JOIN

Ein JOIN ist eine SQL-Verknüpfung zwischen Tabellen. Er erzeugt Ergebniszeilen, indem Zeilen aus verschiedenen Tabellen nach einer Bedingung zusammengeführt werden.

Definition

Join-Bedingung

Die Join-Bedingung steht meist nach ON. Sie sagt, welche Werte aus beiden Tabellen zusammenpassen, zum Beispiel Bestellung.kunden_id = Kunde.id.

Ohne JOIN würdest du nur Nummern sehen. Mit JOIN kannst du die Nummern mit den passenden Namen, Titeln oder Preisen verbinden.

Beispiel

Tabelle Kunde

id name
1 Mia
2 Ben

Tabelle Bestellung

id kunden_id artikel
10 1 Heft
11 2 Stift

Abfrage:

SELECT Kunde.name, Bestellung.artikel

FROM Bestellung

JOIN Kunde ON Bestellung.kunden_id = Kunde.id;

Ergebnis:

name artikel
Mia Heft
Ben Stift
Merke

Ein JOIN beantwortet die Frage: Welche Zeile aus Tabelle A gehört zu welcher Zeile aus Tabelle B?

Interaktive Quizfrage wird geladen ...

INNER JOIN: Nur passende Paare

Der häufigste JOIN ist der INNER JOIN. Er zeigt nur Zeilen, für die es auf beiden Seiten einen Treffer gibt. Wenn eine Bestellung auf keinen Kunden passt, erscheint sie nicht. Wenn ein Kunde keine Bestellung hat, erscheint er ebenfalls nicht.

Definition

INNER JOIN

Ein INNER JOIN liefert nur Zeilen, bei denen die Join-Bedingung in beiden Tabellen erfüllt ist. Nicht passende Zeilen werden im Ergebnis weggelassen.

In SQL darf man oft einfach JOIN schreiben; gemeint ist dann meist INNER JOIN. Für Schulaufgaben ist es aber hilfreich, "inner" mitzudenken: Nur der gemeinsame passende Teil wird angezeigt.

Beispiel

Tabelle Kunde

id name
1 Mia
2 Ben
3 Sara

Tabelle Bestellung

id kunden_id artikel
10 1 Heft
11 2 Stift
12 99 Tasche

Abfrage:

SELECT Kunde.name, Bestellung.artikel

FROM Bestellung

INNER JOIN Kunde ON Bestellung.kunden_id = Kunde.id;

Ergebnis:

  • Mia, Heft
  • Ben, Stift

Sara fehlt, weil sie keine Bestellung hat. Die Bestellung mit kunden_id = 99 fehlt, weil es keinen passenden Kunden gibt.

Gut zu wissen

In einer gut entworfenen Datenbank verhindert ein Fremdschlüssel normalerweise eine Bestellung mit kunden_id = 99, wenn es diesen Kunden nicht gibt. Für Lernbeispiele ist der Fall trotzdem nützlich, weil du daran das JOIN-Verhalten erkennst.

Interaktiver Lückentext wird geladen ...

LEFT JOIN: Alles links behalten

Manchmal willst du auch Zeilen sehen, die keinen passenden Partner haben. Dafür nutzt du einen OUTER JOIN. Der wichtigste für den Einstieg ist LEFT JOIN.

Definition

LEFT JOIN

Ein LEFT JOIN liefert alle Zeilen der linken Tabelle und ergänzt passende Zeilen aus der rechten Tabelle. Gibt es rechts keinen Treffer, stehen dort leere Werte, also NULL.

Links bedeutet: die Tabelle, die im SQL-Text vor LEFT JOIN steht. Das ist eine häufige Prüfungsfalle. Dreht man die Tabellen um, ändert sich auch, was "links" ist.

Beispiel

Alle Kunden anzeigen, auch wenn sie nichts bestellt haben:

SELECT Kunde.name, Bestellung.artikel

FROM Kunde

LEFT JOIN Bestellung ON Kunde.id = Bestellung.kunden_id;

Mit den Tabellen aus dem letzten Beispiel entsteht:

  • Mia, Heft
  • Ben, Stift
  • Sara, NULL

Sara bleibt im Ergebnis, weil Kunde links steht. Bei ihrer Bestellungsspalte steht NULL, weil es keine passende Bestellung gibt.

Merke

Beim LEFT JOIN bleibt die linke Tabelle vollständig erhalten. Frage dich immer: Welche Tabelle steht links von LEFT JOIN?

Interaktive Quizfrage wird geladen ...

RIGHT, FULL und CROSS JOIN kurz eingeordnet

Neben INNER und LEFT gibt es weitere JOIN-Arten. Du musst sie nicht alle ständig verwenden, aber du solltest ihre Idee erkennen.

Definition

RIGHT JOIN

Ein RIGHT JOIN funktioniert wie ein LEFT JOIN, nur bleibt die rechte Tabelle vollständig erhalten. Viele Entwickler vermeiden ihn, indem sie die Tabellenreihenfolge umdrehen und LEFT JOIN nutzen.

Definition

FULL OUTER JOIN

Ein FULL OUTER JOIN behält alle Zeilen beider Tabellen. Wo kein Partner gefunden wird, stehen auf der fehlenden Seite NULL-Werte.

Definition

CROSS JOIN

Ein CROSS JOIN kombiniert jede Zeile der einen Tabelle mit jeder Zeile der anderen Tabelle. Das Ergebnis ist das kartesische Produkt.

Ein CROSS JOIN ist selten das, was du aus Versehen willst: Bei 4 Zeilen links und 3 Zeilen rechts entstehen 12 Kombinationen. Fehlt bei einem normalen JOIN die passende Bedingung, kann eine viel zu große Ergebnismenge entstehen.

Beispiel

Tabelle Farbe: Rot, Blau

Tabelle Groesse: S, M, L

CROSS JOIN erzeugt:

  • Rot S
  • Rot M
  • Rot L
  • Blau S
  • Blau M
  • Blau L

Das ist sinnvoll, wenn wirklich alle Kombinationen gebraucht werden, zum Beispiel Produktvarianten.

Interaktive Quizfrage wird geladen ...

JOINs bei n:m-Beziehungen

Bei n:m-Beziehungen reicht ein einzelner Fremdschlüssel nicht aus. Wenn Schüler mehrere Kurse belegen und Kurse mehrere Schüler haben, entsteht eine Zwischentabelle. JOINs holen daraus wieder lesbare Ergebnisse.

Definition

Zwischentabelle

Eine Zwischentabelle speichert die Zuordnungen einer n:m-Beziehung. Sie enthält meist Fremdschlüssel auf beide beteiligten Tabellen.

Beispiel

Tabellen:

Schueler(id, name)

Kurs(id, titel)

Belegung(schueler_id, kurs_id)

Frage: "Welche Kurse belegt Mia?"

SQL:

SELECT Kurs.titel

FROM Schueler

JOIN Belegung ON Schueler.id = Belegung.schueler_id

JOIN Kurs ON Belegung.kurs_id = Kurs.id

WHERE Schueler.name = 'Mia';

Erst verbindet SQL Mia mit ihren Belegungen. Dann verbindet SQL diese Belegungen mit den passenden Kursen.

Gut zu wissen

Bei mehreren JOINs liest du am besten Kette für Kette: Von welcher Tabelle starte ich? Über welche Fremdschlüssel gehe ich weiter? Welche Spalten sollen am Ende angezeigt werden?

Merke

n:m-Beziehungen liest du meist über zwei JOINs: Starttabelle → Zwischentabelle → Zieltabelle.

Prüfungsmodus

JOIN-Aufgaben wirken schwer, wenn du nur auf die SQL-Wörter starrst. Zeichne dir lieber kleine Pfeile zwischen den Schlüsseln. Dann wird die Abfrage fast mechanisch.

Beispiel

Aufgabe:

"Gib alle Artikelnamen aus, die Ben bestellt hat."

Tabellen:

  • Kunde(id, name)
  • Bestellung(id, kunden_id)
  • Bestellposition(bestellung_id, artikel_id)
  • Artikel(id, name)

Denkweg:

  1. Ben steht in Kunde.
  2. Seine Bestellungen findest du über Kunde.id = Bestellung.kunden_id.
  3. Die Artikel pro Bestellung findest du über Bestellung.id = Bestellposition.bestellung_id.
  4. Die Artikelnamen findest du über Bestellposition.artikel_id = Artikel.id.

SQL-Skelett:

SELECT Artikel.name

FROM Kunde

JOIN Bestellung ON Kunde.id = Bestellung.kunden_id

JOIN Bestellposition ON Bestellung.id = Bestellposition.bestellung_id

JOIN Artikel ON Bestellposition.artikel_id = Artikel.id

WHERE Kunde.name = 'Ben';

Interaktive Quizfrage wird geladen ...

Alles auf einen Blick

Interaktive Mindmap wird geladen ...

Interaktive Lernkarten wird geladen ...

Abschluss-Check

Interaktive Quizfrage wird geladen ...

Zusammenfassung

Ein SQL JOIN verbindet Tabellen über eine Bedingung, meistens über Primär- und Fremdschlüssel. So werden verteilte Daten wieder zu lesbaren Ergebnissen zusammengesetzt.

INNER JOIN zeigt nur passende Paare. LEFT JOIN behält alle Zeilen der linken Tabelle und füllt fehlende rechte Werte mit NULL. CROSS JOIN bildet alle Kombinationen und muss bewusst eingesetzt werden.

Bei n:m-Beziehungen führt der Weg meist über eine Zwischentabelle. Wenn du die Schlüssel-Pfade zeichnest, kannst du auch längere JOIN-Abfragen Schritt für Schritt verstehen.