ORACLE 在not in中使用null的问题
来源:互联网 发布:python 生成器 编辑:程序博客网 时间:2024/05/22 21:48
以前还专门小总结过一下ORACLE中关于NULL的一些问题,碰巧今天在看书的过程中又看到了另外一个以前没发现的需要注意的地方,那就是在not in中使用null的问题。
SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> select deptno
2 from dept
3 where deptno in (10,50,null);
DEPTNO
----------
10
//看到使用in的时候即便有null 也是正常的 下面看一下not in
SQL> select deptno
2 from dept
3 where deptno not in (10,50);
DEPTNO
----------
20
30
40
//这里看起来和我们的预期挺符合的哦
SQL> select deptno
2 from dept
3 where deptno not in (10,50,null);
no rows selected
//怎么回事 为什么加了个null 前面的20、30、40三条数据就不显示出来了
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。
- ORACLE 在not in中使用null的问题
- ORACLE 在not in中使用null的问题
- ORACLE 在not in中使用null的问题
- oracle中not in(null)问题
- oracle中not in(null)问题
- Oracle里not in 有关null处理的奇怪问题
- Oracle中NOT IN的问题
- SQL NOT IN NULL的问题
- SQL NOT IN NULL的问题
- SQL NOT IN NULL的问题
- Oracle中not exists 与not in 的使用情况
- Oracle NULL 和 NOT IN
- SQL 中IN、NOT IN 对结果含NULL的子查询使用
- 解决mybatis在oracle中null的问题
- oracle子查询中not in后面不能为null值的理解
- hive中使用is null和is not null问题
- hive中使用is null和is not null问题
- not in 不能使用在子查询结果为null
- 权限验证
- Autoconf使用
- 刚加入了个CF战队!叫"吴川★飞虎"
- UDK-用VS来制作一个简单的Game Mod
- Global.asa介绍作用
- ORACLE 在not in中使用null的问题
- 日本专利检索地址和专利号码问题
- 忆龙2009:恢复H3C系列交换机的TELNET口令
- FsRtlCheckOplock简单描述
- ubuntu安装输入法的方法。
- Annotation的部分命令
- 女心理师
- 世界上最遥远的距离
- 匿名实名