要检索非空值

时间:2014-03-06 06:44:56

标签: sql oracle

我的要求是

select *

from emp

where comm is not null;

如何在不使用null(或)not null关键字的情况下查找非null(或)null值。

3 个答案:

答案 0 :(得分:4)

为什么要避免使用IS NULLIS NOT NULL?这是最简单和最合乎逻辑的方法。

如果你真的有决心

WHERE nvl( comm, -99 ) = -99
假设comm永远不会有-99的值,

还会为NULL comm提供所有行。

WHERE comm > -99
假设comm的所有非NULL值都大于-99,

将为NOT NULL comm提供所有行。

以这种方式实际编写查询是没有意义的,但是,当您可以使用IS NULLIS NOT NULL并最终获得更易于维护的查询时。

答案 1 :(得分:1)

好吧,这只会返回comm不为null的行,因为null不等于任何东西,甚至不是它自己。

select * from emp where comm = comm

反过来说,我会说像

select * from emp
except
select * from emp where comm = comm

将'except'替换为'minus'或系统中的等效项。

小心这些,这将无效

select * from emp where not(comm = comm)
select * from emp where comm <> comm

null == null是“未知”,而不是“假”,而不是(未知)再次未知。这是一件事。

答案 2 :(得分:1)

1)空    ===== 从emp中选择* 其中nvl(length(comm),0)= 0

2)不是空的    =========

从emp中选择* 其中nvl(length(comm),0)&lt;&gt; 0