第2章 SQL基本元素:NULL

原文地址:http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements005.htm

如果数据行的某列没有值,则该列被称为null,或者包含空值。null可以出现在不受NOT NULL或者PRIMARY KEY完整性约束的任何数据类型的列上。null用于未知或者没有意义的值。

不要使用null表示0值,因为这两者不是等价的。

注释

目前Oracle数据库将长度为0的字符串看作null。但是以后的版本中不一定仍然这样,并且Oracle建议用户不要将空字符串看作与null相同。

任何包含null的算术表达式结果总是为null。例如,null加10结果为null。事实上,所有运算符(除了连接操作之外)操作一个null操作数的结果都为null。

SQL函数中的null

所有的标量函数(除了REPLACE、NVL以及CONCAT之外)给定一个null参数时结果为null。可以使用NVL函数在参数为null时返回一个值。例如,表达式NVL(commission_pct, 0)在commission_pct为空时返回0,不为空时返回commission_pct的值。

大多数聚集函数忽略null值。例如,假设一个查询计算1000、null、null、null以及2000这5个值的平均数。查询将会忽略null值,平均值为(1000 + 2000)/2 = 1500。

null值的比较

要检验null,只能使用IS NULL和IS NOT NULL比较条件。如果在其他带null的条件并且结果取决于null值,结果为UNKNOWN。因为null代表缺乏数据,null不能等于(也不能不等于)其他值或者另一个null。但是,在计算DECODE函数时两个null值被看作是相等的。

Oracle也将复合键中的两个null看作是相等的。也就是说包含null的两个复合键,如果非空部分相等,则看作是相同的。

查询条件中的null

结果为UNKNOWN的查询条件与FALSE的作用差不多。例如,一个SELECT语句,WHERE子句中的条件结果为UNKNOWN,返回0行。但是UNKNOWN的条件与FALSE不同之处在于UNKNOWN条件的进一步运算结果仍然为KNOWN。因此,NOT FALSE结果为TRUE,但是NOT UNKNOWN结果为UNKNOWN。

下表显示了各种条件中null计算的示例。如果结果为UNKNOWN的条件用于SELECT语句的WHERE子句中,该查找不会返回任何数据行。

 条件

 A的值

 结果

 a IS NULL

 10

 FALSE

 a IS NOT NULL

 10

 TRUE

 a IS NULL

 NULL

 TRUE

 a IS NOT NULL

 NULL

 FALSE

 a = NULL

 10

 UNKNOWN

 a != NULL

 10

 UNKNOWN

 a = NULL

 NULL

 UNKNOWN

 a != NULL

 NULL

 UNKNOWN

 a = 10

 NULL

 UNKNOWN

 a != 10

 NULL

 UNKNOWN

关于包含null的逻辑条件真值表,参见“第7章 条件”。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24945919/viewspace-747811/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24945919/viewspace-747811/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值