zoukankan      html  css  js  c++  java
  • oracle子查询中not in后面不能为null值的理解

    首先说说oracle中的null值吧。

    null在oracle中代表未知,表示可能有,也可能没有。任何与null值的普通运算都为null,但可以用一些函数来处理null值,oracle排序中默认null最大。

    接着进入正文

    这里in后面有null,能返回数据

    但加了not后,就不能返回数据了

    这里的in后面的句子可以理解为or拼接,即

    id in (200,201,null)可以等价于id=200 or id=201or id=null,

    id not in (200,201,null)可以等价于not(id=200 or id=201or id=null)或id!=200 and id!=201 and id=null。

    为什么都是or拼接,in可以而not in不可以呢,可以把not in理解为后面的and表达式就知道了,因为id=null为null,也就相当于false,导致整个表达式为false,无论传何值都为false,自然无法返回数据。

    当然若硬要用or表达式来解释呢,其实可以看not 后面的这个括号,有括号意味着要确定里面的返回值再加not。

    例如id为201,整个in 的or表达式为

    false or true or null,当执行到true时就可返回,无需看null值了。

    而在 not in的or表达式中是

    not (fasle or true or null),我的理解是由于括号的存在,需要把表达式全运行一遍,不能向无括号那样运行到true就可返回,所以括号内运行一遍表达式由于有null参与运算,运算之后都为null,相当于false,所以就无法选定行了

    当发现not in后的子查询后面有null值是,可以在子查询里用is not null或函数过滤null值。


    ————————————————
    版权声明:本文为CSDN博主「随遇er安」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/longcccvv/article/details/54376015

  • 相关阅读:
    XML 加密、解密
    word 转 pdf
    PowerDesigner(PowerDesigner15.1.0.2850)下载、安装以及破解
    SQL 2005 18456
    SQL 2005端口的修改
    SQL——统计查询
    由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例 解决办法
    ASP.NET MVC中Model View Controller的开发顺序
    使用Windows身份验证的Intranet网站安全管理 Windows Authentication
    ASP.NET web.config中数据库连接字符串connectionStrings节的配置
  • 原文地址:https://www.cnblogs.com/kelly1314/p/11368295.html
Copyright © 2011-2022 走看看