zoukankan      html  css  js  c++  java
  • Oracle 在not in中使用null的问题

    http://www.linuxidc.com/Linux/2012-07/66212.htm

    以前还专门小总结过一下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。

  • 相关阅读:
    获取设备的UUID
    关于获取基站信息总结
    【转】获取CID 和 LAC的方法
    js(javascript)与ios(Objective-C)相互通信交互
    ios面试题
    iOS 知识-常用小技巧大杂烩
    iOS时间格式的转换
    PresentViewController切换界面
    宏文件
    iOS使用NSMutableAttributedString 实现富文本(不同颜色字体、下划线等)
  • 原文地址:https://www.cnblogs.com/xiaoL/p/4353411.html
Copyright © 2011-2022 走看看