指定的值列表中有一个为空值,NOT IN返回false
程序员文章站
2022-06-10 09:25:27
...
如果指定的值列表中有一个为空值(null),那么NOT IN返回false。怎么理解呢?看下面这张表:
表users:
user_id name 1 lisi 2 zhangsan 3 wangwu
现在执行如下这条SQL:
SELECT * FROM users WHERE user_id NOT IN (2, 3, NULL);
在Oracle 10g下执行结果是:
未选定行
我是这样理解的:NULL本身代表一个不确定的值,也就是说给定的user_id可能匹配NULL代表的值,也可能不匹配。由于这种不确定性,所以就返回false。
我们再看下面这条语句:
SELECT * FROM users WHERE user_id IN (2, 3, NULL);
在Oracle 10g下执行结果是:
user_id name 2 zhangsan 3 wangwu
原因是值为2,3的user_id在(2, 3, NULL)列表中是可以确定的,这与NULL值得不确定性没有关系,但值为1的user_id就不同了,数据库因为无法判断是否与NULL匹配,因此不会返回这条记录。