Fehlende Werte: NULL
NULL kennst du aus der ersten Lektion: Es bedeutet, dass ein Wert fehlt. Der Shop kennt die Stadt von Anna Fischer nicht, und Robot Rebellion hat noch kein Erscheinungsdatum. Um solche Zeilen zu finden, liegt = NULL nahe. Aber diese Abfrage findet nichts:
SELECT name, stadt
FROM kunden
WHERE stadt = NULL;| name | stadt |
|---|
Das ist kein Fehler in den Daten. NULL bedeutet „unbekannt“, und ein Vergleich von irgendetwas mit einem unbekannten Wert ergibt ein unbekanntes Ergebnis. Ist Hamburg gleich einer unbekannten Stadt? Das weiß niemand. Ein solcher Vergleich ist weder wahr noch falsch; sein Ergebnis ist wieder NULL. Und WHERE behält nur die Zeilen, für die die Bedingung wahr ist. Nicht einmal NULL = NULL ist wahr: Sind zwei unbekannte Städte dieselbe? Wieder unbekannt. Du kannst es selbst ausprobieren: Ein SELECT ohne FROM liest keine Tabelle, es rechnet nur die Werte aus, die du schreibst, und zeigt sie als eine Zeile:
SELECT 5 = NULL, NULL = NULL;| 5 = NULL | NULL = NULL |
|---|---|
| NULL | NULL |
Deshalb hat SQL einen eigenen Operator für fehlende Werte, IS NULL. Die Spiele, die noch nicht erschienen sind:
SELECT titel, erschienen
FROM spiele
WHERE erschienen IS NULL
ORDER BY titel;| titel | erschienen |
|---|---|
| Mystery Manor | NULL |
| Robot Rebellion | NULL |
Sein Gegenteil ist IS NOT NULL, die Zeilen, die einen Wert haben: WHERE erschienen IS NOT NULL findet die 18 Spiele, die erschienen sind.
Dasselbe gilt für jeden anderen Vergleich, <> eingeschlossen. Welche Kunden sind nicht aus Hamburg?
SELECT name, stadt
FROM kunden
WHERE stadt <> 'Hamburg'
ORDER BY name;| name | stadt |
|---|---|
| Ida Zimmermann | Dresden |
| Jonas Hartmann | Leipzig |
| Lukas Neumann | Leipzig |
| … | … |
Anna Fischer und Hannes Schulz sind nicht im Ergebnis. Ist eine unbekannte Stadt von Hamburg verschieden? Wieder unbekannt. Wenn du sie auch haben willst, musst du nach ihnen fragen: stadt <> 'Hamburg' OR stadt IS NULL.
Typischer Fehler: = NULL statt IS NULL. Es ist kein Fehler, also warnt SQLite dich nicht; die Abfrage findet einfach nichts. Wenn du nach fehlenden Werten suchst, schreibe immer IS NULL.
So schreibst du es:
Anweisungen
- 1
Die Abfrage im Editor sollte den Namen und die E-Mail-Adresse der Kunden zeigen, die keine Stadt haben, findet aber nichts. Behebe das:
name email Anna Fischer anna.fischer@mail.de Hannes Schulz hannes@schulz.dev - 2
Zeige darunter die Spiel-ID, die Sterne und den Kommentar der Fünf-Sterne-Bewertungen, die einen Kommentar haben, sortiert nach der Spiel-ID:
spiel_id sterne kommentar 1 5 Das beste RPG seit Jahren! 3 5 So entspannend. 6 5 Perfekt für den Bus. 7 5 Fantastische Weltraumschlachten. 14 5 Schnell und spaßig. 15 5 Jeden Cent wert. - 3
Der Shop schreibt einen Newsletter über neue Spiele: die, die 2025 oder später erschienen sind, und die, die noch nicht erschienen sind. Zeige ihren Titel und ihr Erscheinungsdatum, sortiert nach dem Erscheinungsdatum und dann nach dem Titel:
titel erschienen Mystery Manor NULL Robot Rebellion NULL Star Pilots 2025-01-23 Turbo Karts 2025-06-05 Goal Rush 2025-09-26 Knight's Oath 2025-11-14