NULL's hebben een speciaal gedrag:als je iets met een NULL vergelijkt, krijg je een NULL
, wat iets anders is dan false
of 0
. Het betekent "onbekend".
Neem bijvoorbeeld deze tabel:
user_id | gender
------------------
1 | NULL
2 | 'M'
3 | 'F'
4 | 'F'
SELECT * FROM mytable WHERE gender = 'M'
retourneert 1 rij, zoals verwacht
SELECT * FROM mytable WHERE gender != 'M'
geeft 2 rijen terug, NIET 3 rijen.
SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL
geeft de verwachte 3 rijen terug.
Bewerken:voor sommige toepassingen gebruikt u 0
(of, God verhoede, nog een "magisch getal") in plaats van NULL
is zelfs niet aan te raden (eenheden of exacte waarden zijn in dit voorbeeld niet 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, de NULL
op 6 januari betekent "waarde onbekend" - misschien omdat de temperatuur zo laag was dat de thermometersonde niet meer reageerde. Het is echter een heel andere betekenis dan 3 januari, toen de temperatuur 0
was , dat wil zeggen, 0 graden.
Ook, zoals @Bill Karwin vermeldt, gedragen NULL's zich speciaal in geaggregeerde functies (COUNT
,SUM
,AVG
etc.):berekenen van AVG(Temperature)
op de bovenstaande gegevens zou je -14.5
, omdat de NULL-rij wordt genegeerd.