Die Wunschliste füllen
Die Tabelle ist fertig, also füllen wir sie. Vor dem Start der Wunschliste hat der Shop einige Kunden gebeten, sie auszuprobieren, und sie haben ihre ersten Wünsche gespeichert. Manche haben sich Spiele gewünscht, die sie seitdem gekauft haben, andere Spiele, die sie nicht gekauft haben. Einige haben sich Robot Rebellion und Mystery Manor gewünscht, die noch nicht erschienen sind, und zwei von ihnen, Hannes Schulz und Max Krause, haben noch nie etwas bestellt.
Im Editor findest du die Projektdatei mit der Lösung der letzten Übung. Von jetzt an sind die Abfragen früherer Übungen auskommentiert, damit das Ergebnis nur die neuen zeigt. Das CREATE TABLE (und bald der INSERT) läuft weiter, denn jedes Ausführen beginnt mit einer frischen Datenbank.
Zur Erinnerung: Ein INSERT kann viele Zeilen hinzufügen. Liste nach dem Namen der Tabelle die Spalten in Klammern auf und schreibe nach VALUES für jede Zeile ein Paar Klammern, durch Kommas getrennt. Text und Datumsangaben stehen in einfachen Anführungszeichen:
INSERT INTO bewertungen (spiel_id, kunde_id, sterne, kommentar)
VALUES
(9, 4, 4, 'Tolle Rätsel.'),
(4, 7, 5, NULL);Jetzt wirken die Regeln, die du der Tabelle gegeben hast. Ein Wunsch eines Kunden, den es nicht gibt, wie (99, 1, '2025-06-01'), stoppt den INSERT mit dem Fehler FOREIGN KEY constraint failed. Dasselbe Spiel zweimal auf einer Wunschliste stoppt ihn mit UNIQUE constraint failed: wunschliste.kunde_id, wunschliste.spiel_id: Ein Primärschlüssel erlaubt keine zwei Zeilen mit denselben Werten, genau wie UNIQUE, deshalb nennt die Meldung beide Spalten. Und wenn eine Zeile eines INSERT eine Regel verletzt, schlägt die ganze Anweisung fehl und fügt keine ihrer Zeilen hinzu.
Typischer Fehler: ein Datum ohne Anführungszeichen. Für SQLite ist 2025-10-01 kein Datum, sondern eine Rechnung, 2025 minus 10 minus 1, der Wunsch bekäme also das Datum 2014. Und es gibt keinen Fehler: Eine STRICT-Tabelle macht aus der Zahl ohne Murren den Text '2014', weil dabei nichts verloren geht. Datumsangaben stehen immer in Anführungszeichen.
Für Menschen ist eine Tabelle aus IDs schwer zu lesen. Um zu sehen, wer sich welches Spiel wünscht, verbinde die Wunschliste mit kunden (über kunde_id) und mit spiele (über spiel_id), wie du es in der Lektion über Joins gelernt hast. Mit kurzen Tabellen-Aliasen wie w, k und s bleibt die Abfrage gut lesbar.
So schreibst du es:
Anweisungen
- 1
Schreibe unter dem Kommentar
-- 2. Die Wunschliste fülleneinenINSERT, der diese 15 Zeilen der Wunschliste hinzufügt (die Spaltenkunde_id,spiel_idundhinzugefuegt):(1, 8, '2025-10-01'), (1, 18, '2025-03-02'), (2, 15, '2025-11-15'), (2, 19, '2025-07-19'), (3, 15, '2025-11-16'), (5, 1, '2025-01-10'), (5, 7, '2025-02-01'), (6, 5, '2024-05-20'), (7, 18, '2025-04-11'), (9, 1, '2025-06-30'), (10, 15, '2025-11-20'), (12, 18, '2025-05-10'), (12, 19, '2025-05-10'), (13, 10, '2025-08-25'), (14, 8, '2025-10-05')Prüfe dann, ob sie alle da sind: Zeige unter dem
INSERTdie Anzahl der Zeilen in der Tabelle, als Spalte mit dem Namenalle_wuensche:alle_wuensche 15 - 2
Zeige nun die Wunschliste so, dass Menschen sie lesen können: den Namen des Kunden, den Titel des Spiels und das Datum, an dem es hinzugefügt wurde (die Spalten
name,titelundhinzugefuegt), sortiert nach dem Namen und dann nach dem Titel. Sie beginnt so:name titel hinzugefuegt Anna Fischer Dragon Forge 2025-01-10 Anna Fischer Star Pilots 2025-02-01 Emma Becker Goal Rush 2025-10-01 Emma Becker Robot Rebellion 2025-03-02 … … …