SQL是null和= null
可能重复:
什么是“= null”和“IS NULL”
IS NULL和= NULL之间是否有区别?
有什么区别
where x is null
和
where x = null
为什么后者不起作用?
在SQL中,使用比较运算符(例如=
, !=
, <
等)将null
值与任何其他值(包括另一个null
)进行比较将导致null
,对于where (严格来说,这是“不正确”,而不是“假”,但效果是一样的)。
推理是null
表示“未知”,所以任何与null
比较的结果也是“未知的”。 所以你不会通过编码where my_column = null
获得行的命中。
SQL提供了用于测试列是否为null
的特殊语法,通过is null
is not null
,这是测试null
(或不为null
)的特殊条件。
下面是一些SQL,显示了各种条件和它们的效果。
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行(按预期):
TEST XY x = y 1 1
看到这在SQLFiddle上运行
请注意, NULL不等于NULL 。
NULL
不是一个值,因此不能与另一个值进行比较。
where x is null
检查x是否为空值。
where x = null
是检查x是否等于NULL,这永远不会是真的
首先是检查字段值是否为null
正确方法,而以后将不会按照您期望的方式工作,因为null
是不等于任何值的特殊值,所以不能使用等于使用=
比较。
所以当你需要检查一个字段值是否为null
,使用:
where x is null
代替:
where x = null
我认为平等是可以绝对确定的事情。 null的问题在于它本质上是未知的。 null与任何其他值结合为null – 未知。 问SQL:“我的值是否等于null? 即使输入为空,每一次都是未知的。 我认为IS NULL的实现清楚。