未选择Oracle sql null值

时间:2013-02-21 03:33:51

标签: sql oracle

在NAME表中,FIRST列为null但未选择任何行。请帮我理解。

SELECT * FROM NAME WHERE FIRST != '1'

5 个答案:

答案 0 :(得分:14)

null的任何比较都是错误的 - =<>><等等。您也不能在null列表中使用IN - 它会被忽略。此外,两个null甚至彼此相等。

要获取空值,您需要明确地询问它们,如下所示:

SELECT * FROM NAME WHERE FIRST IS NULL OR FIRST != '1'

答案 1 :(得分:9)

与NULL的任何比较都返回NULL,这相当于FALSE。这是不平等的真正前夕。

如果要包含NULL值,请执行以下操作之一:

where first <> '1' or first is null

where coalesce(first, '<null>') <> '1'

答案 2 :(得分:4)

在Oracle中,除非您明确要求,否则null不被视为合法值:

select * from name where (first != '1') or first is null

你也可以使用NVL(类似于合并):

select * from name where nvl(first,'0') != '1'

答案 3 :(得分:2)

这是正确的,因为NULL永远无法与其他任何东西进行比较....

您唯一的选择是在命令

中包含NULL检查
SELECT * FROM NAME WHERE FIRST!=1 OR FIRST IS NULL

根据Oracle文档,NULL被定义为一个未知的值或者该值没有意义。这就是为什么Oracle提到不将ZERO的值视为NULL的原因。这只是一个FYI,一个插件。谢谢!

答案 4 :(得分:1)

NULL是愚蠢的。期间。

NULL是邪恶的。

如果X为NULL并且Y为NULL,则X实际上等于Y,因为它们都是NULL。

这也是我不能说的PITA

IF X IN('a','B','C',null)

因为这种情况发生。但是现在我不得不说

IF ( X IN ('a','B','C') or X is NULL ) 

如果我忘记了括号,那是浪费时间,而且有出错的风险。

让我更恼火的是,NULL不应首先出现。字段(嗯……好孩子,我称它们为“列”)应始终初始化。期。停止空值。不允许他们。默认值应始终为零或空格,以便那些懒于在其软件中初始化列的人员将自动为其进行初始化。

在许多情况下,无法定义默认值零和空格会使生活变得比原先更加困难。