NULL: kein Wert
Kurz gesagt: NULL bedeutet in SQL einen fehlenden oder unbekannten Wert, deshalb prüfst du ihn mit IS NULL und nicht mit = NULL.
Problem
Der Kunde, der verschwunden ist
Das Marketing will allen Kunden außerhalb von Sofia schreiben. Es gibt 20 Kunden, 6 davon aus Sofia. Du erwartest 14:
Es kommen 13 heraus. Wer fehlt? Boris Mitev, der nie gesagt hat, aus welcher Stadt er ist. Er ist nicht aus Sofia, und trotzdem steht er nicht im Ergebnis.
Die Idee
Unbekannt
Die Stadt von Boris ist NULL: das Fehlen eines Werts. Es ist weder leerer Text noch die Zahl 0. Es bedeutet „wir wissen es nicht“.
Deshalb arbeitet SQL mit drei Antworten: wahr, falsch und unbekannt. „Ist die Stadt von Boris anders als Sofia?“ Wir wissen es nicht, seine Stadt ist unbekannt. Die Antwort ist „unbekannt“, und WHERE behält nur die Zeilen, für die sie wahr ist.
Dasselbe passiert, wenn du NULL mit = suchst:
Nichts. NULL = NULL ist ebenfalls „unbekannt“: Zwei unbekannte Werte können gleich sein oder nicht.
Die Idee
IS NULL
NULL hat eine eigene Prüfung: IS NULL, und das Gegenteil IS NOT NULL.
Das ist der einzig richtige Weg. = NULL ist ein Fehler, der keine Meldung gibt, nur ein leeres Ergebnis.
Probier es aus
Ohne Kategorie
Zeige Name und Preis der Produkte ohne Kategorie. Im Feld steht schon ein Versuch. Führe ihn aus und korrigiere ihn.
Lösung
SELECT name, price FROM products WHERE category_id IS NULL;WHERE category_id IS NULL: die Geschenkkarte. Sie ist weder ein Lebensmittel noch ein Haushaltsartikel.
Probier es aus
Alle außerhalb von Sofia
Korrigiere die Abfrage vom Anfang der Lektion: jeder Kunde außerhalb von Sofia, auch die ohne Stadt.
Lösung
SELECT name, city FROM customers
WHERE city <> 'Sofia' OR city IS NULL;WHERE city <> 'Sofia' OR city IS NULL. Jetzt sind es 14, mit Boris. Wenn eine Spalte NULL sein kann, frag dich bei jedem „ungleich“, wohin die leeren Werte fallen.
Sieh es dir an
NOT IN und ein NULL
Eine NOT IN-Liste mit einem NULL darin liefert ein leeres Ergebnis:
Warum? city NOT IN ('Sofia', NULL) bedeutet city <> 'Sofia' AND city <> NULL. Der zweite Teil ist immer „unbekannt“, also ist die ganze Bedingung nie wahr.
Du wirst selten NULL von Hand in eine Liste schreiben. Aber wenn die Liste aus einer anderen Abfrage kommt und ein NULL enthält, bekommst du einen leeren Bericht ganz ohne Fehlermeldung. Wir begegnen dem bei den Unterabfragen wieder.
Übung
Die Produkte mit Kategorie
Zeige Name und Kategorie aller Produkte, die eine Kategorie haben.
Lösung
SELECT name, category_id FROM products WHERE category_id IS NOT NULL;WHERE category_id IS NOT NULL. 24 Produkte, alle außer der Geschenkkarte.
Test
Teste dich
Verwandte Lektionen
Abschnitt „Verwandte Lektionen“- Baut auf: SELECT: Spalten auswählen · WHERE: Zeilen filtern · IN, BETWEEN und LIKE
- Geht weiter in: ORDER BY, LIMIT und DISTINCT · Rechnen in einer Abfrage · Textfunktionen · CASE und fehlende Werte
- Aufgaben zum Thema: Daten lesen