Wer hat diese Bestellung aufgegeben?
Im Support von Nordwind Rad liegt ein Ticket: Bestellung 103 ist beschädigt angekommen. Sie sehen in der Tabelle der Bestellungen nur die Zahl 3 als Kunden-Nummer. Name und Stadt stehen woanders.
Gute Datenbanken speichern jede Angabe nur einmal, in der passenden Tabelle. Mit einem Join holen Sie zusammen, was zusammengehört.
Am Ende dieser Lektion
Notiz
Ich kann zwei Tabellen verbinden, um eine Frage zu beantworten.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Primärschlüssel | die eindeutige Nummer einer Zeile | kunden.id |
| Fremdschlüssel | eine Spalte, die auf die Nummer einer anderen Tabelle zeigt | bestellungen.kunden_id |
| JOIN | verbindet Zeilen zweier Tabellen | |
| ON | sagt, welche Spalten zusammenpassen müssen | |
| Tabellenname.Spalte | nennt eine Spalte eindeutig | kunden.name |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Schlüssel zeigt auf eine andere Tabelle
Jede Zeile in kunden hat eine eindeutige Nummer: die id. Man nennt sie Primärschlüssel.
In bestellungen steht die Spalte kunden_id. Sie enthält die Nummer der Person, die bestellt hat. So ein Verweis heißt Fremdschlüssel. Ändert sich die Stadt einer Person, ändern Sie eine Zeile in kunden.
Probieren Sie es: beide Tabellen ansehen
-- Zwei Tabellen, jede mit ihrem Thema.
SELECT * FROM kunden;
-- Eine Bestellung nennt nur die Nummer ihres Kunden.
SELECT * FROM bestellungen;
JOIN ... ON verbindet passende Zeilen
Ein JOIN legt zwei Tabellen nebeneinander. Hinter ON steht die Regel, welche Zeilen zusammenpassen.
Hier gilt: bestellungen.kunden_id = kunden.id. Die Datenbank sucht für jede Bestellung die Person mit dieser Nummer. Den Tabellennamen vor der Spalte brauchen Sie, damit klar ist, welche id gemeint ist.
Ein Beispiel Schritt für Schritt: Bestellung 103
| Schritt | Was die Datenbank tut | Ergebnis |
|---|---|---|
| 1 | Liest Bestellung 103 | kunden_id ist 3 |
| 2 | Sucht in kunden die Zeile mit id 3 | Sophie Keller, Hamburg |
| 3 | Setzt beide Zeilen zusammen | 103, Sophie Keller, 150 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Probieren Sie es: Bestellungen mit Namen
-- Jede Bestellung mit dem Namen der Person.
SELECT bestellungen.id, kunden.name, bestellungen.betrag
FROM bestellungen
JOIN kunden ON bestellungen.kunden_id = kunden.id;
-- Dieselbe Frage, nur bezahlte Bestellungen aus Hamburg.
SELECT bestellungen.id, kunden.name, bestellungen.betrag
FROM bestellungen
JOIN kunden ON bestellungen.kunden_id = kunden.id
WHERE kunden.stadt = 'Hamburg' AND bestellungen.status = 'bezahlt';
Join, WHERE und GROUP BY gehören zusammen
Ein Join ist nur der erste Schritt. Danach arbeiten WHERE, GROUP BY und ORDER BY wie bisher, nun mit den Spalten beider Tabellen.
So beantworten Sie eine Frage wie: Wie viel hat jede Person insgesamt bestellt? Gruppiert wird nach dem Namen, nicht nach der Nummer.
Probieren Sie es: Summe je Person
-- Anzahl und Summe je Person, die größte Summe zuerst.
SELECT kunden.name, COUNT(*) AS anzahl, SUM(bestellungen.betrag) AS summe
FROM bestellungen
JOIN kunden ON bestellungen.kunden_id = kunden.id
GROUP BY kunden.name
ORDER BY summe DESC;
-- Eva Roth fehlt. Prüfen Sie: Hat sie eine Bestellung?
SELECT * FROM bestellungen WHERE kunden_id = 5;
Ein häufiger Fehler
Warnung
Viele glauben, ein Join zeige immer alle Zeilen beider Tabellen. Das stimmt nicht. Ein einfacher JOIN behält nur Zeilen mit Partner. Eva Roth hat nichts bestellt und fehlt deshalb. Fragen Sie sich bei jedem Join: Wer könnte fehlen?