MySQL与null值比较

问题描述 投票:27回答:5

我在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。我们在这里没有比较一个角色的价值。有人可以说明为什么它不起作用?

mysql sql null isnull
5个回答
45
投票

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

任何与NULL的算术比较都不会返回true或false,而是返回NULL。因此,NULL != 'C'返回NULL,而不是返回true。

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

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

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


29
投票

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

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

例如:

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

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


14
投票

在SQL中,NULL值是一个特殊值,与任何其他值无法比较。与NULL直接比较的结果总是为NULL,尽管(不幸的是)在某些实现中可能会发现FALSE。

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


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

2
投票

select * from user,其中application_id ='1223333344'且name为null;

© www.soinside.com 2019 - 2024. All rights reserved.