Zum Inhalt
wannacode

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:

SQLDatenbank: Shop

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:

SQLDatenbank: Shop

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.

SQLDatenbank: Shop

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.

SQLDatenbank: Shop

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.

SQLDatenbank: Shop

Sieh es dir an

NOT IN und ein NULL

Eine NOT IN-Liste mit einem NULL darin liefert ein leeres Ergebnis:

SQLDatenbank: Shop

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.

SQLDatenbank: Shop

Test

Teste dich

1. Was ist NULL?
2. Was ist das Ergebnis von NULL = NULL?
3. Welche Abfrage findet die Produkte ohne Kategorie?

Erstellt von Ivo Gergov im Rahmen der Kampagne von Evo Tech für zugängliche Programmierausbildung ·