指定的值列表中有一个为空值,NOT IN返回false

3 篇文章 0 订阅
1 篇文章 0 订阅

    如果指定的值列表中有一个为空值(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匹配,因此不会返回这条记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值