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(*)

转载于:https://www.cnblogs.com/smallidea/p/5786266.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值