NULL具有特殊的行为:将任何内容与NULL进行比较,可以返回一个NULL,这是一个除了false或0以外的内容。它意味着“未知”。
例如,拿这个表:
user_id | gender
------------------
1 | NULL
2 | 'M'
3 | 'F'
4 | 'F'
SELECT * FROM mytable WHERE gender =’M’将按预期返回1行
SELECT * FROM mytable WHERE gender!=’M’将返回2行,而不是3行。
SELECT * FROM mytable WHERE gender!=’M’OR性别IS NULL将返回预期的3行。
编辑:对于某些应用程序,使用0(或上帝禁止,另一个“魔术数字”)而不是NULL是不可取的(单位或精确值在本示例中无关):
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
这里,1月6日的空值表示“值未知” – 可能是因为温度太低,以至于温度计探头停止响应。然而,当温度为0,即0度时,它与1月3日完全不同。
另外,正如@Bill Karwin所说,NULL在聚合函数(COUNT,SUM,AVG等)中特别有效:对上述数据计算AVG(Temperature)会给出-14.5,因为NULL行被忽略。