zoukankan      html  css  js  c++  java
  • 对Oracle里NULL的理解

    1.在Oracle里,null是个相对独立的东西。它和所有非空的数据对立。对于字符串''来说,null既不等于'',也不不等于'';对于数值型来说,null既不等于0,也不不等于0;它不等于任何值,也不不等于任何值。也就是说null和所以其他的值没有可比性,即不能用等于、不等于、大于或小于和其它数值比较,当然也包括空值本身,只能用is null,is not null比较。

    2.如果使用带有其它比较操作符的条件表达式,并且其结果依赖于空值(如,在全量中找到某字段为空的所有记录,然后在此基础上再查找时,结果肯定为空。),那么其结果必定是NULL。在where条件中,Oracle认为结果为NULL的条件为FALSE,带有这样条件的select语句不返回行,也不返回错误信息。

    3.往Oracle里插入''时,不会和sqlserver一样存入'',而是将这个字段设置为null,那么在查询这条记录的时候,如果查询'',则不会返回结果,条件里使用null才能找到。

    【例子】解释第2条。

    代码

    create table T_XY
    (
      FID  
    NUMBER(2not null,
      VALD 
    NUMBER(32)
    )
    tablespace DATATS
      pctfree 
    10
      initrans 
    1
      maxtrans 
    255
      storage
      (
        initial 64K
        minextents 
    1
        maxextents unlimited
      );

    如上面的脚本建表,随便插入几条数据,要包括为空的记录才有效果。

    执行select * from t_xy t,列出全部数据

    执行select * from t_xy t where vald!=0 and vald is null,不返回记录,因为where条件依赖于null,则结果为null,整个where条件为false,select语句不返回行

    执行select * from t_xy t where vald!=0 and vald is not null 返回不带空字段,并且vald!=0的记录因为where条件不依赖于null

    执行select * from t_xy t where vald!=0 返回不带空字段,并且vald!=0的记录因为where条件不依赖于null,等同于上面的语句。(vald在和0比较的时候,Oracle自动排除掉空值字段,所     以可以不用加vald is not null条件。所以只要是满足vald!=0,则肯定是在not null的范围里相互比较,所以肯定查找不到is null的记录)

  • 相关阅读:
    MGR
    复制参数优化
    mysql复制
    sysbench
    mysql 用户及权限
    MySQL多实例安装
    PHP常用数组函数
    AJAX传递数据的两种编码x-www-form-urlencoded与json的区别
    使用PHP操作文件
    var_dump和var_export区别
  • 原文地址:https://www.cnblogs.com/xryyforver/p/1836724.html
Copyright © 2011-2022 走看看