In SQL markieren NULL Values Felder, die keinen Eintrag haben.
SELECT Spalte FROM Tabelle WHERE Spalte IS NULL;
SELECT Spalte FROM Tabelle WHERE Spalte IS NOT NULL;
Mit SQL NULL ist nicht die Zahl 0 gemeint. NULL ist kein String (also nicht „NULL“), sondern ist eigenständige Eigenschaft, die beschreibt, dass ein Feld leer ist. Diese Leere bedeutet ebenfalls nicht, dass ein leerer String (also ‘’) enthalten ist. Es existieren schlicht und ergreifend keine Informationen zu diesem Feld.
SQL NULL - Beispiel
Ein Blumenhändler möchte seine Mitarbeiter ab sofort automatisiert per E-Mail benachrichtigen, falls es Neuigkeiten gibt. Dafür benötigt er in seiner Tabelle für jeden Mitarbeiter eine E-Mail-Adresse. Um sicherzustellen, dass er von jedem die E-Mail-Adresse besitzt, führt er folgende Abfrage aus:
SELECT Vorname, Nachname, Telefon
FROM Mitarbeiter
WHERE E-Mail-Adresse IS NULL;
Er bekommt zwei Mitarbeiter ausgegeben, deren E-Mail-Adressen fehlen. Via Telefon fragt er diese ab und fügt sie über einen UPDATE-Befehl ein. Ein Mitarbeiter geht auch nicht an sein Telefon. Damit das Programm des Blumenhändlers funktioniert, müssen in der Abfrage allerdings nur E-Mail-Adressen stehen, da es bei seinem E-Mail-Provider zu einer Fehlermeldung kommt, wenn ein NULL Wert existiert. Um ausschließlich existierende E-Mail-Adressen auszugeben, nutzt der Blumenhändler folgende Abfrage:
SELECT E-Mail-Adresse
FROM Mitarbeiter
WHERE E-Mail-Adresse IS NOT NULL;
Unterschied zwischen NULL und leerem String (' ')
Ein Beispiel zur Unterscheidung zwischen NULL und einem leeren String ist das Auslesen von Endungen aus konjugierten Verben. In der Spalte Endung werden über eine Funktion alle Buchstaben ausgegeben, die nach dem Wortstamm folgen:
Wort | Stamm | Endung |
Gehen | Geh | en |
Geh! | Geh |
|
Geht | Geh | t |
Die zweite Zeile „Geh!“ hat keine Endung. Die Ausgabe ist ein leerer String. Die Suche nach NULL Values über…
SELECT *
FROM Wörterbuch
WHERE Endung IS NULL;
…kann in der Spalte „Endung“ in einigen SQL-Systemen Probleme verursachen und diese Felder nicht auslesen, da eine Zeichenfolge enthalten ist, welche leer ist. Das Feld selbst enthält also einen unsichtbaren Wert – die String-Anführungsstriche (“) ohne einen Wert dazwischen.