MySQL与null值比较

dev*_*ngs 32 mysql sql null isnull

我在MySQL表中有一个名为CODE的列,它可以是NULL.假设我有一些CODE ='C'的行,我想在我的select结果集中忽略它.我的结果集中可以有CODE = NULL或CODE!='C'.

以下查询不返回CODE为NULL的行:

SELECT * from TABLE where CODE!='C'
Run Code Online (Sandbox Code Playgroud)

但是这个查询按预期工作,我知道这是正确的方法.

SELECT * from TABLE where CODE IS NULL OR CODE!='C'
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么只有CODE!='C'不返回CODE = NULL的行?绝对'C'不是NULL.我们在这里没有比较一个角色的价值.有人可以说明为什么它不起作用?

Sam*_*aan 46

在MySQL中,NULL被认为是"缺失的,未知的值",而不是没有价值.看看这个关于NULL的MySQL参考.

任何算术比较NULL都不会返回true或false,而是返回NULL.所以,NULL != 'C'返回NULL,而不是返回true.

与'NULL'的任何算术比较都将返回false.要在SQL中检查:

SELECT IF(NULL=123,'true','false') 
Run Code Online (Sandbox Code Playgroud)

要检查NULL值,我们需要使用IS NULL&IS NOT NULL运算符.

  • 在所有关系数据库中,`null`是未知的缺失值.没有关于它的mysql特有的. (4认同)
  • 但在某些情况下,`NULL`相当于`FALSE`.因此,调试和修复可能会令人烦恼,看起来似乎相当漫长和黑客.考虑`UPDATE表SET名=?WHERE id = id AND name <>?`显然,如果更新会改变任何内容,请更新.但是如果name为null,它将永远不会更新该行.丢失的数据不等于某个实际值,所以它当然应该返回true并工作.也许DB需要一个"NULL但是为TRUE"的值类型,类似于Perls`0但是为真. (2认同)

小智 30

基于我的测试和文档:http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html

您可以使用<=>比较null并获得布尔结果
注意:它看起来像NOT EQ运算符,但它是EQ运算符

例如:

select x <=> y; 
or
select @x <=> @y;
Run Code Online (Sandbox Code Playgroud)

这也比较字符串与null,字符串与字符串等.

  • 正如 @Alan_Fullmer 提到的“&lt;=&gt;”是一个 EQual 运算符。因此,如果您想检查 NEQ (&lt;&gt;),那么只需用 not 包围您的语句即可。例如 NOT(X &lt;=&gt; y)。 (4认同)

cor*_*nuz 14

在SQL中,NULL值是一个特殊值,与任何其他值无法比较.与值直接比较的结果要么始终为FALSE,要么为NULL,具体取决于实现.

要测试空值,您应该使用IS NULLIS NOT NULL.


Vas*_*lov 6

SELECT * 
FROM `table_name` 
WHERE IFNULL(`column_name` != 'C', TRUE)
Run Code Online (Sandbox Code Playgroud)