4. Die Königsdisziplin: Der JOIN

Wir haben gelernt, dass wir Daten aufteilen müssen, um Fehler zu vermeiden. Die Kunden stehen in einer Tabelle, die Bestellungen in einer anderen. Aber was, wenn wir am Ende des Monats eine vollständige Rechnung drucken wollen? In der Tabelle "Bestellungen" steht nur Kunden_ID: 102. Der Computer muss die Tabellen für uns wieder zusammenfügen.

Das Chaos ohne JOIN (Kartesisches Produkt)

Wenn du dem Computer nur sagst: "Zeig mir alles aus kunden und bestellungen" (`SELECT * FROM kunden, bestellungen`), passiert eine Katastrophe: Der Computer kombiniert einfach jeden Kunden mit jeder Bestellung. Hat ein Shop 100 Kunden und 100 Bestellungen, bekommst du 10.000 völlig falsche Zeilen als Ergebnis. Er weiß ja nicht, was zusammengehört!

Die Lösung: Der INNER JOIN

Mit einem JOIN kleben wir zwei Tabellen intelligent aneinander. Damit der Computer weiß, welche Zeilen zusammenpassen, müssen wir ihm über den Befehl ON genau sagen, wo sich der Primärschlüssel der einen Tabelle und der Fremdschlüssel der anderen Tabelle exakt gleichen.

Die Syntax und der Alias-Trick

Ein kompletter Befehl sieht so aus:

SELECT *
FROM kunden
JOIN bestellungen ON kunden.id = bestellungen.kunden_id;

Tipp für Profis (Aliasse): Da es sehr anstrengend ist, lange Tabellennamen immer wieder auszuschreiben, kann man ihnen temporäre Abkürzungen geben (ein sogenanntes Alias).
Statt kunden.id schreibst du einfach k.id, wenn du vorher FROM kunden k definierst.

Aufgabe 1: Tabellen verheiraten

Hier siehst du unsere zwei Tabellen: kunden und bestellungen. Beachte, dass in den Bestellungen auch die MwSt gespeichert ist, wie wir es in Einheit 6 gelernt haben.

Tabelle: kunden

id (PK)nameort
101Max MustermannLinz
102Anna SchmidtWien
103Peter ParkerGraz

Tabelle: bestellungen

b_id (PK)kunden_id (FK)artikelpreismwst (%)
1101Laptop899 €20
2102Maus25 €20
3101Tastatur45 €20

Dein Auftrag: Schreibe einen SQL-Befehl, der beide Tabellen verbindet (`SELECT *`). Verbinde sie über die `ON`-Bedingung, indem du die `id` aus der kunden-Tabelle mit der `kunden_id` aus der bestellungen-Tabelle gleichsetzt!

SQL>