正 文

说一说“NULL”


www.7dspace.com  更新日期:2005-11-6 2:42:02  七度空间


二、空值的测试

因为空值表示缺少数据,所以空值和其它值没有可比性,即不能用等于、不等于、大于或小于和其它数值比较,当然也包括空值本身(但是在decode中例外,两个空值被认为是等价)。测试空值只能用比较操作符ISNULL和ISNOTNULL。如果使用带有其它比较操作符的条件表达式,并且其结果依赖于空值,那么其结果必定是NULL。在where条件中,Oracle认为结果为NULL的条件为 FALSE,带有这样条件的select语句不返回行,也不返回错误信息。

例如查询EMP表中MGR为NULL的行:

SQL >select * from emp where mgr='';
no rows selected
SQL >select * from emp where mgr=null;
no rows selected
SQL >select * from emp where mgr is null;
EMPNO ENAME  JOB  MGR HIREDATE   SAL  COMM  DEPTNO
-- - - - -
7839 KING  PRESIDENT  17-NOV-81  5000        10

第1、2句写法不妥,WHERE条件结果为NULL,不返回行。第三句正确,返回MGR为空值的行。

三、空值和操作符

1.空值和逻辑操作符

逻辑操作符

表达式

结果

AND
NULL AND TRUE
NULL

NULL AND FALSE
FALSE

NULL AND NULL
NULL
OR
NULL OR TRUE
TRUE

NULL OR FALSE
NULL

NULL OR NULL
NULL
NOT
NOT NULL
NULL

可以看到,在真值表中,除NULLANDFALSE结果为FALSE、NULLORTRUE结果为TRUE以外,其它结果均为NULL。

虽然在where条件中,Oracle认为结果为NULL的WHERE条件为FALSE,但在条件表达式中NULL不同于FALSE。例如在NOT(NULLANDFALSE)和NOT(NULLANDNULL)二者中仅有一处FALSE和 TRUE的区别,但NOT(NULLANDFALSE)的结果为TRUE,而NOT(NULLANDNULL)的结果为NULL。

下面举例说明空值和逻辑操作符的用法:

SQL > select * from emp where not comm=null and comm!=0;
no rows selected
SQL > select * from emp where not ( not comm=null and comm!=0 );
EMPNO ENAME  JOB      MGR  HIREDATE  SAL  COMM  DEPTNO
 -- - - - -
7844 TURNER SALESMAN  7698 08-SEP-81 1500   0     30

第一个Select语句,条件"notcomm=nullandcomm!=0"等价于 NULLANDCOMM!=0。对于任意一行,如果COMM为不等于0的数值,条件等价于NULLANDTRUE,结果为NULL;如果COMM等于0,条件等价于NULLANDFALSE,结果为FALSE。所以,最终结果不返回行。

第二个Select语句的条件为第一个Select语句条件的"非"(NOT),对于任意一行,如果COMM为不等于0的数值,条件等价于NOTNULL,结果为NULL;如果COMM等于0,条件等价于NOTFALSE,结果为TRUE。所以,最终结果返回行COMM等于0的行。

5页,页码:[1] [2] [3] [4] [5] 

上一篇:Oracle控制文件如何重建?
下一篇:商业门户站点的十二个关键特性
作者:  来源:网络整理 ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐