在NAME表中,FIRST列为null但未选择任何行。请帮我理解。
SELECT * FROM NAME WHERE FIRST != '1'
答案 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不应首先出现。字段(嗯……好孩子,我称它们为“列”)应始终初始化。期。停止空值。不允许他们。默认值应始终为零或空格,以便那些懒于在其软件中初始化列的人员将自动为其进行初始化。
在许多情况下,无法定义默认值零和空格会使生活变得比原先更加困难。