Zwei Tabellen verbinden
Ein Join setzt die Zeilen zweier Tabellen zusammen. Hier ist die Frage aus der vorigen Übung, wer welche Bestellung aufgegeben hat, für alle Bestellungen auf einmal beantwortet:
SELECT bestellungen.id, bestellt_am, name
FROM bestellungen
JOIN kunden ON bestellungen.kunde_id = kunden.id
ORDER BY bestellungen.id;| id | bestellt_am | name |
|---|---|---|
| 1 | 2024-01-20 | Emma Becker |
| 2 | 2024-02-14 | Lukas Neumann |
| 3 | 2024-02-29 | Olivia Braun |
| 4 | 2024-03-15 | Emma Becker |
| … | … | … |
JOIN kunden fügt die Tabelle kunden zur Abfrage hinzu, und die Bedingung nach ON sagt, welche Zeilen zusammengehören: Eine Bestellung gehört zu dem Kunden, dessen id die kunde_id der Bestellung ist. Es ist der Fremdschlüssel aus der vorigen Übung, nur dass jetzt die Datenbank ihm folgt statt du. bestellungen.kunde_id ist die Spalte kunde_id der Tabelle bestellungen: der Name der Tabelle, ein Punkt und der Name der Spalte. Beide Tabellen haben eine Spalte id, also musst du sagen, wessen id du meinst, in ON und auch in SELECT. Mehr dazu erfährst du in der nächsten Übung.
Wie findet die Datenbank die Paare? Du kannst es dir so vorstellen: Sie geht die Zeilen von bestellungen eine nach der anderen durch und sucht für jede die Zeilen von kunden, für die die Bedingung gilt. Jedes gefundene Paar wird eine Zeile des Ergebnisses, mit den Spalten beider Tabellen nebeneinander, und SELECT wählt dann aus, welche davon angezeigt werden. Bestellung 1 hat die kunde_id 1, die Bedingung gilt für die Zeile von Emma Becker, und das Ergebnis bekommt eine Zeile mit Bestellung 1 und Emma Becker. Auch Bestellung 4 hat die kunde_id 1, also steht Emma Becker wieder im Ergebnis, neben Bestellung 4. So soll es sein: Jeder Kunde steht so oft im Ergebnis, wie er Bestellungen hat.
Und ein Kunde ohne Bestellung? Hannes Schulz hat noch nie etwas bestellt: Keine Bestellung hat die kunde_id 12, seine id. Seine Zeile hat nichts, mit dem sie sich paaren könnte, also steht sie gar nicht im Ergebnis. JOIN behält nur die Zeilen, die ein Gegenstück gefunden haben; die anderen verschwinden. Für eine Liste von Bestellungen ist das genau richtig. Wenn du sie behalten willst, gibt es eine andere Art von Join, die du später in dieser Lektion lernst.
Du wirst auch INNER JOIN sehen: Das ist dasselbe wie JOIN; INNER ist nur der volle Name dieser Art von Join. Die Reihenfolge der Tabellen ändert nichts daran, welche Paare ein JOIN findet: FROM kunden JOIN bestellungen ON … gibt dieselben Zeilen, und ebenso, wenn du die beiden Seiten von = vertauschst.
Typischer Fehler: eine Bedingung, die die falschen Spalten verbindet. ON bestellungen.id = kunden.id läuft ohne Fehler, paart aber Bestellung 1 mit Kunde 1, Bestellung 2 mit Kunde 2 und so weiter, und das bedeutet nichts. Die Bedingung verbindet einen Fremdschlüssel mit dem Primärschlüssel, auf den er zeigt: hier bestellungen.kunde_id mit kunden.id.
So schreibst du es:
Anweisungen
- 1
Zeige die Bewertungen mit den Titeln der Spiele: Verbinde
bewertungenmitspiele(diespiel_ideiner Bewertung ist dieideines Spiels) und zeige die Spaltentitel,sterneundkommentar. Sortiere die Zeilen nachtitelund die Bewertungen desselben Spiels nachkunde_id:titel sterne kommentar Bakery Story 4 Niedlich und beruhigend. Cube Logic 3 NULL Cube Logic 5 Perfekt für den Bus. Dragon Forge 4 Tolle Geschichte, ein bisschen lang. … … … - 2
Schreibe darunter eine Abfrage, die
kundenmitbestellungenverbindet und dennamejedes Kunden mit dem Datum jeder seiner Bestellungen (bestellt_am) zeigt, sortiert nachname, dann nachbestellt_am. Hannes Schulz und Max Krause kommen darin nicht vor: Sie haben noch nie etwas bestellt.name bestellt_am Anna Fischer 2024-05-11 Anna Fischer 2025-04-15 Emma Becker 2024-01-20 … …