SQL is null and = null
SQL中的null与= null的问题出现的原因是,null不是一个值,因此无法与另一个值进行比较。在SQL中,null被视为未知值,而不是一个具体的值。因此,当我们使用=操作符来比较null时,结果永远不会为真。实际上,null只是表示该变量没有值。
解决这个问题的方法是使用"is null"来检查变量是否为null。例如,使用"where x is null"来检查变量x是否为null。
总结起来,虽然null在编程语言中可以被视为一个值,但在SQL中它被视为未知值,无法与其他值进行比较。要检查变量是否为null,在SQL中应使用"is null"而不是"= null"。
在C#中,使用string a = null来表示将null赋值给变量a,但对程序员来说,null表示变量没有值。在SQL中,null有多种解释或三值逻辑。
null在SQL中不等于null的原因是null不是一个具体的值,无法与其他值进行比较。要解决这个问题,应使用"is null"来检查变量是否为null。
在SQL中,使用比较运算符(例如=,!=,<等)比较一个null
值和任何其他值(包括另一个null
)将导致一个null
,在where子句中被视为false
(严格来说,它是“不是真的”,而不是“false”,但效果相同)。
这是因为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 X Y x = y 1 1
NULL = NULL不为真,我们可以得出结论,NULL在=运算符的两边具有不同的语义含义。在左边是一个概念,在右边是一个谓词(即“未知”与“是未知”)。这些本质上是不相等的。
不,NULL的语义含义只是“未知”。它不是一个值,也不能像值一样进行推理。NULL = NULL不为真,是因为你无法比较你没有了解的事物,这就是NULL所代表的。宇宙中的星星数量是否等于沙粒的数量?谁知道呢?答案是NULL(未知)。
在SQL中,当我们需要检查一个字段的值是否为null
时,我们不能使用=
进行等值比较,因为null
是一个特殊的值,它不等于任何东西。
因此,如果我们需要检查一个字段的值是否为null
,应该使用is null
来进行判断,而不是= null
。
例如,如果我们想要选择所有字段x的值为null
的记录,应该使用以下语句:
where x is null
而不是:
where x = null
使用where x is null
可以正确地判断字段x的值是否为null
,而使用where x = null
则无法达到预期的效果。
这是因为null
是一个特殊的值,它表示缺少值或未知值。在SQL中,null
不等于任何东西,包括它自己。因此,无论我们使用=
还是!=
进行比较,都无法得到预期的结果。
为了解决这个问题,我们应该使用is null
来判断字段的值是否为null
。这样可以正确地检查字段的值是否为null
,并且可以得到预期的结果。
当我们需要判断一个字段的值是否为null
时,应该使用is null
进行判断,而不是使用= null
进行等值比较。这样可以避免出现问题,并得到正确的结果。