oracle中空值讨论

在oracle里,空值是一个特殊的值,其它数据库可能空值可以等于空值,但oracle里是不行的,空值是“未知”的。

例子:

select * from dual where null = null; --结果为空
select * from dual where null <> null; --结果为空
select * from dual where null is null; --结果为X
select * from dual where null is not null; --结果为空

从结果中可以看出,null和null既不是相等,也不是不相等。
当null is null时,返回ture,结果为X。
当null is not null时,返回false,所以结果为空。

使用以下方法处理空值:
1、case语句或decode语句用is null或is not null判断。
2、COALESCE(Expr1, Expr2, … , Exprn) 返回参数中第一个非空的表达式的值
3、NVL(Expr1,Expr2) 如果Expr1为NULL,返回Expr2的值,否则返回Expr1的值
4、NVL2(Expr1,Expr2,Expr3) 如果Expr1为NULL,返回Expr3的值,否则返回Expr2的值
5、NULLIF(Expr1,Expr2) 如果Expr1和Expr2的值相等,返回NULL,否则返回Expr1的值