NULLen haben ein besonderes Verhalten:Wenn Sie irgendetwas mit NULL vergleichen, erhalten Sie ein NULL
, was etwas anderes als false
ist oder 0
. Es bedeutet "unbekannt".
Nehmen Sie zum Beispiel diese Tabelle:
user_id | gender
------------------
1 | NULL
2 | 'M'
3 | 'F'
4 | 'F'
SELECT * FROM mytable WHERE gender = 'M'
wird wie erwartet 1 Zeile zurückgeben
SELECT * FROM mytable WHERE gender != 'M'
gibt 2 Zeilen zurück, NICHT 3 Zeilen.
SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL
gibt die erwarteten 3 Zeilen zurück.
Bearbeiten:Verwenden Sie für einige Anwendungen 0
(oder, Gott bewahre, eine andere "magische Zahl") anstelle von NULL
ist nicht einmal ratsam (Einheiten oder genaue Werte sind in diesem Beispiel nicht relevant):
Date | Temperature
--------------------------
2010-01-01 | 10
2010-01-02 | 4
2010-01-03 | 0
2010-01-04 | -22
2010-01-05 | -45
2010-01-06 | NULL
2010-01-07 | -34
Hier der NULL
am 6. Januar bedeutet "Wert unbekannt" - vielleicht, weil die Temperatur so niedrig war, dass die Thermometersonde nicht mehr reagierte. Es hat jedoch eine völlig andere Bedeutung als der 3. Januar, als die Temperatur 0
war , also 0 Grad.
Außerdem verhalten sich NULLen, wie @Bill Karwin erwähnt, speziell in Aggregatfunktionen (COUNT
,SUM
,AVG
usw.):Berechnung von AVG(Temperature)
auf die obigen Daten würde Ihnen -14.5
geben , da die NULL-Zeile ignoriert wird.