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.
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!
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.
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.
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.
| id (PK) | name | ort |
|---|---|---|
| 101 | Max Mustermann | Linz |
| 102 | Anna Schmidt | Wien |
| 103 | Peter Parker | Graz |
| b_id (PK) | kunden_id (FK) | artikel | preis | mwst (%) |
|---|---|---|---|---|
| 1 | 101 | Laptop | 899 € | 20 |
| 2 | 102 | Maus | 25 € | 20 |
| 3 | 101 | Tastatur | 45 € | 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!