可能重复:
what is “=null” and “ IS NULL”
Is there any difference between IS NULL and =NULL
之间有什么区别
where x is null
和
where x = null
为什么后者不起作用?
答案 0 :(得分:116)
在SQL中,使用比较运算符(null
,null
,{{1}对=
值与任何其他值(包括另一个!=
)进行比较}},等)将导致<
,出于where子句的目的被认为是null
(严格来说,它是“不是真的”,而不是“假”,但效果是一样的。)
原因是false
表示“未知”,因此与null
进行任何比较的结果也是“未知”。因此,您不会通过编码null
来获取行数。
SQL提供了一种特殊语法,用于通过where my_column = null
和null
来测试列is null
,这是测试is not null
的特殊条件(或不是一个null
)。
这里有一些SQL显示了各种条件及其效果。
null
只返回1行(按预期方式):
create table t (x int, y int);
insert into t values (null, null), (null, 1), (1, 1);
select 'x = null' as test , x, y from t where x = null
union all
select 'x != null', x, y from t where x != null
union all
select 'not (x = null)', x, y from t where not (x = null)
union all
select 'x = y', x, y from t where x = y
union all
select 'not (x = y)', x, y from t where not (x = y);
上查看此内容
答案 1 :(得分:56)
重要的是要注意, NULL不等于NULL 。
NULL
不是值,因此无法与其他值进行比较。
where x is null
检查x是否为空值。
where x = null
正在检查x是否为NULL,这将永远不会为真
答案 2 :(得分:5)
首先是检查字段值是否为null
的正确方法,而以后将无法按预期方式工作,因为null
是特殊值,它不等于任何东西,所以你可以' t使用=
进行相等比较。
因此,当您需要检查字段值是否为null
时,请使用:
where x is null
而不是:
where x = null
答案 3 :(得分:3)
我认为平等是可以绝对决定的。 null的问题在于它本身就是未知数。 null与任何其他值组合为null - 未知。问SQL“我的值是否等于null?”即使输入为空,每次都是未知的。我认为IS NULL的实现很清楚。