我的要求是
select *
from emp
where comm is not null;
如何在不使用null(或)not null关键字的情况下查找非null(或)null值。
答案 0 :(得分:4)
为什么要避免使用IS NULL
和IS NOT NULL
?这是最简单和最合乎逻辑的方法。
如果你真的有决心
WHERE nvl( comm, -99 ) = -99
假设comm
永远不会有-99的值,还会为NULL
comm
提供所有行。
WHERE comm > -99
假设comm
的所有非NULL值都大于-99,将为NOT NULL
comm
提供所有行。
以这种方式实际编写查询是没有意义的,但是,当您可以使用IS NULL
或IS 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