zoukankan      html  css  js  c++  java
  • oracle中的null

    在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零。
     
    ORACLE允许任何一种数据类型的字段为空,除了以下两种情况:
    1、主键字段(primary key),
    2、定义时已经加了NOT NULL限制条件的字段
     
    说明:
    1、等价于没有任何值、是未知数,NULL与0、空字符串、空格都不同。
      SQL> SELECT 1 FROM dual WHERE ''='';
      未选择任何行
      SQL> select 1 from dual where ''=null;
      未选择任何行
      SQL> SELECT 1 FROM dual WHERE NULL = NULL;
      未选择任何行
      SQL> select 1 from dual where null = 0;        
      未选择任何行 
      SQL> select 1 from dual where '' is null;
               1
      ----------
               1  
      SQL> SELECT 1 FROM dual WHERE NULL IS NULL;
               1
      ----------
               1
    2、对空值做加、减、乘、除等运算操作,结果仍为空。如果where条件中出现这种比较,就是未知,相当于false,进而不返回数据
       SQL> select 1 from dual where (select 1+null from dual) is null
       SQL> select 1 from dual where (select 1-null from dual) is null
       SQL> select 1 from dual where (select 1*null from dual) is null
       SQL> select 1 from dual where (select 1/null from dual) is null
      
       注:not in的情况
       SQL> select 1 from dual where 'b' not in ('a', null)  
       SQL> select 1 from dual where 'b'!='a' and 'b'!=null
       -- 以上两句是对等的,因为'b'!=null始终返回的是null,所以真值表达式也始终不成立,进而不返回任何的数据。
       -- 正确的做法应该是排除null的情况,比如在括号中排除null值的出现
    3、NULL的处理使用NVL函数。
       SQL> select 1 from dual where nvl(null,0)=nvl(null,0);
    4、比较时使用关键字用“is null”和“is not null”。
       SQL> select 1 from dual where '' is null;
       SQL> select 1 from dual where '' is not null;
    5、空值不能被索引,所以查询时有些符合条件的数据可能查不出来,count(*)中,用nvl(列名,0)处理后再查。
       ????
    6、排序
      1)不加“关照”的情况下,我们可以把那些NULL值假想为所有内容中值是最大的,因此,升序排序后NULL值在最后,倒序排序后NULL值在最前!
      2)特殊“关照”的情况下,当指定“NULLS FIRST”时,无论是升序排序还是倒序排序,NULL值都会排列在最前面;当指定“NULLS LAST”时,无论是升序排序还是倒序排序,NULL值都会排列在最后面。

    7、大多数的聚合函数会忽略null,例如
      1)avg,1000、null、null、2000,使用avg取平均值,实际上是(1000+2000)/2,所以特殊情况下,最好是取和然后在除以结果集数量
      2)count,1000、null、null、2000,得到的结果是2,最好是使用count(1)或count(*)

  • 相关阅读:
    java设计模式----工厂设计模式
    java拓展----CountDownLatch同步辅助类
    java设计模式----单例模式
    java拓展----Lock锁
    Orcal学习----初识Orcal
    java学习----泛型
    java学习----Junit&Log4j
    java学习----注解
    java学习----反射
    java学习----数据解析
  • 原文地址:https://www.cnblogs.com/smallidea/p/5786266.html
Copyright © 2011-2022 走看看