MySQL与null值比较

时间:2012-03-07 20:35:02

标签: mysql sql null isnull

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

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

SELECT * from TABLE where CODE!='C'

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

SELECT * from TABLE where CODE IS NULL OR CODE!='C'

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

6 个答案:

答案 0 :(得分:42)

在MySQL中,NULL被视为“缺失的未知值”,而不是没有值。看看at this MySQL Reference on NULL

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

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

SELECT IF(NULL=123,'true','false') 

要检查NULL值,我们需要使用IS NULL& IS NOT NULL运营商。

答案 1 :(得分:29)

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

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

例如:

select x <=> y; 
or
select @x <=> @y;

这也比较了字符串vs null,字符串vs字符串等

答案 2 :(得分:12)

在SQL中,NULL值是一个特殊值,与任何其他值无法比较。 与值直接比较的结果总是FALSE或NULL,具体取决于实现。

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

答案 3 :(得分:6)

SELECT * 
FROM `table_name` 
WHERE IFNULL(`column_name` != 'C', TRUE)

答案 4 :(得分:2)

从用户中选择*,其中application_id =&#39; 1223333344&#39;和name为null;

答案 5 :(得分:0)

指定的问题也可能出现在联接中,以上答案并不是特别有用。我更喜欢这样做的方法是合并成其他方式无法实现的价值。例如,

   select foo from bar
     inner join baz on bar.x = baz.y
如果bar.xbaz.y都为空,则

将不起作用(join不会带来结果)。解决方法是使用

   select foo from bar
     inner join baz on coalesce(bar.x, -1) = coalesce(baz.y, -1)

其中-1是“不可能的”值,表示它永远不会出现在数据集中。