oracle中in与not in集合中有空值问题

时间 : 2019-05-13
点击次数 : 143

      IN和NOT IN本质上都是OR运算,因而计算逻辑OR时处理NULL的方式不同,产生的结果也不同。

      下面我们分析一下前面的三条语句

      SQL> select deptno

        2  from dept

        3  where deptno in (10,50,null);

      这里可以等价于where deptno=10 or deptno=50 or deptno=null,由于是or相连接,那么只要有一个条件为TRUE,整个就喂TRUE了。所以deptno为10的记录显示出来了。

      SQL> select deptno

        2  from dept

        3  where deptno not in (10,50,null);

      这里等价于where not (deptno=10 or deptno=50 or deptno=null),拿deptno=20的记录来举例吧。

      not (20=10 or 20=50 or 20=null)

      not(false or false or null)

      not null

      null

      (以前只知道在where条件返回false的时候不成立,现在看来返回NULL的时候也不成立呀,下面是做的一个小实验可以证明这个猜想)

      #####################

      SQL> select * from dept

        2  where 1=null;

      no rows selected

      #####################

      SQL> select deptno

        2  from dept

        3  where deptno not in (10,50);

      这里等价于where not (deptno=10 or deptno=50),依然拿deptno=20来举例。

      not (20=10 or 20=50 )

      not(false or false)

      not false

      true

      注意:FALSE OR NULL=NULL ,而TRUE OR NULL=TRUE。

上一篇:Dell R730服务器 Raid5配置

上一篇:一个sql语句在mysql中的执行流程

烟台网云网络科技有限公司 鲁ICP备14027327号-3

回到顶部