现象
首先,我们往测试表a中,插入几条测试数据:
INSERT INTO a VALUES ('1'),(NULL),('');
SELECT * FROM a;
得到如下结果:
其次,我们查询表a中id列不为1的数据:
SELECT * FROM a WHERE id <> '1';
结果却只有1条符合条件
的数据:
我们预期的结果是有两条,分别是NULL
和空字符''
。
可测试结果却少了NULL这条。这表明SQL对NULL的处理存在特殊的逻辑。
验证
我们重新写SQL:
SELECT * FROM a WHERE id <> '1' OR id IS NULL;
这回,结果符合我们的预期:
结论
对NULL进行判断处理时,只能采用IS NULL或IS NOT NULL,而不能采用=, <, <>, !=这些操作符!