NULL ersetzen mit COALESCE
Du weißt, dass NULL „kein Wert“ bedeutet. Das hat eine Folge, die man leicht vergisst: Eine Berechnung mit NULL ergibt NULL. Fünf plus etwas Unbekanntes ist unbekannt, und das gilt auch für einen Text, an den nichts angehängt wird. In dieser Kundenliste ist das ein Problem, denn die Stadt von Anna Fischer ist NULL:
SELECT name, 'Wohnt in ' || stadt AS info
FROM kunden
WHERE id BETWEEN 4 AND 6;| name | info |
|---|---|
| Noah Winter | Wohnt in Dresden |
| Anna Fischer | NULL |
| Jonas Hartmann | Wohnt in Leipzig |
Nicht nur die Stadt fehlt, sondern der ganze Text: Die info von Anna Fischer ist NULL. Dasselbe passiert mit +, -, * und /, und die meisten Funktionen liefern für NULL wieder NULL, wie du bei LENGTH gesehen hast.
Die Funktion COALESCE behebt das. Sie nimmt beliebig viele Argumente und liefert das erste, das nicht NULL ist. COALESCE(stadt, 'einer unbekannten Stadt') ist also die Stadt, wenn der Kunde eine hat, und der Text 'einer unbekannten Stadt', wenn nicht:
SELECT name, 'Wohnt in ' || COALESCE(stadt, 'einer unbekannten Stadt') AS info
FROM kunden
WHERE id BETWEEN 4 AND 6;| name | info |
|---|---|
| Noah Winter | Wohnt in Dresden |
| Anna Fischer | Wohnt in einer unbekannten Stadt |
| Jonas Hartmann | Wohnt in Leipzig |
Bei mehr Argumenten probiert COALESCE sie der Reihe nach: COALESCE(a, b, 'keiner') ist a, wenn a einen Wert hat, sonst b, wenn b einen hat, und sonst 'keiner'.
SQLite hat auch IFNULL(x, y), das dasselbe mit genau zwei Argumenten tut. COALESCE gehört zum SQL-Standard und funktioniert in jeder Datenbank, deshalb benutzt dieser Kurs es. Du könntest dasselbe auch mit CASE WHEN stadt IS NULL THEN … ELSE stadt END schreiben, aber COALESCE ist viel kürzer.
Ersetze NULL nur in dem, was eine Abfrage zeigt. In der Tabelle sagt NULL etwas Wahres, nämlich dass der Shop die Stadt nicht kennt, und ein erfundener Wert würde das verbergen. Und achte darauf, dass der Ersatz sinnvoll ist: Eine fehlende Zahl ist nicht immer 0.
Typischer Fehler: ein Ersatztext ohne Anführungszeichen. COALESCE(stadt, unbekannt) sucht nach einer Spalte namens unbekannt und scheitert mit no such column: unbekannt. Ein Text steht immer in einfachen Anführungszeichen: COALESCE(stadt, 'unbekannt').
So schreibst du es:
Anweisungen
- 1
Zeige den Titel jedes Spiels und sein Erscheinungsdatum als
erscheinungsdatum, mitbald erhältlichfür die Spiele, die noch nicht erschienen sind. Sortiere die Spiele nach der Spalteerschienenund dann nach dem Titel, sodass die unveröffentlichten zuerst kommen:titel erscheinungsdatum Mystery Manor bald erhältlich Robot Rebellion bald erhältlich Cube Logic 2020-02-11 … … - 2
Zeige darunter jede Bewertung von Dragon Forge (
spiel_id1) als eine Textzeile,zusammenfassung: die Sterne,/5:und der Kommentar, zum Beispiel4/5: Tolle Geschichte, ein bisschen lang.Schreibe für eine Bewertung ohne Kommentar(kein Kommentar)an seiner Stelle. Sortiere die Bewertungen nachkunde_id:zusammenfassung 4/5: Tolle Geschichte, ein bisschen lang. 5/5: Das beste RPG seit Jahren! 3/5: Am Anfang zu schwer. 5/5: (kein Kommentar)