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的实现清楚。