Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Zwei Tabellen zu einer Antwort verbinden

Nach dieser Lektion: Ich kann zwei Tabellen verbinden, um eine Frage zu beantworten.

Lektion, 45 Min.Keine Befehle

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

BegriffWas er bedeutetBeispiel
Primärschlüsseldie eindeutige Nummer einer Zeilekunden.id
Fremdschlüsseleine Spalte, die auf die Nummer einer anderen Tabelle zeigtbestellungen.kunden_id
JOINverbindet Zeilen zweier Tabellen
ONsagt, welche Spalten zusammenpassen müssen
Tabellenname.Spaltenennt eine Spalte eindeutigkunden.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

Code: sql
-- 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

SchrittWas die Datenbank tutErgebnis
1Liest Bestellung 103kunden_id ist 3
2Sucht in kunden die Zeile mit id 3Sophie Keller, Hamburg
3Setzt beide Zeilen zusammen103, Sophie Keller, 150

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Probieren Sie es: Bestellungen mit Namen

Code: sql
-- 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

Code: sql
-- 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?

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.