NULL'er har speciel adfærd:Hvis du sammenligner noget med en NULL, får du en NULL
tilbage , som er noget andet end false
eller 0
. Det betyder "ukendt".
Tag for eksempel denne tabel:
user_id | gender
------------------
1 | NULL
2 | 'M'
3 | 'F'
4 | 'F'
SELECT * FROM mytable WHERE gender = 'M'
returnerer 1 række som forventet
SELECT * FROM mytable WHERE gender != 'M'
returnerer 2 rækker, IKKE 3 rækker.
SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL
returnerer de forventede 3 rækker.
Rediger:For nogle programmer, brug 0
(eller, gud forbyde, et andet "magisk tal") i stedet for NULL
er ikke engang tilrådeligt (enheder eller nøjagtige værdier er ikke relevante i dette eksempel):
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
Her er NULL
den 6. januar betyder "værdi ukendt" - måske fordi temperaturen var så lav, at termometersonden holdt op med at reagere. Det er dog en helt anden betydning end den 3. januar, hvor temperaturen var 0
, altså 0 grader.
Også, som @Bill Karwin nævner, opfører NULL'er sig specielt i aggregerede funktioner (COUNT
,SUM
,AVG
osv.):beregner AVG(Temperature)
på ovenstående data ville give dig -14.5
, da rækken NULL ignoreres.