SQL is null and = null

12 浏览
0 Comments

SQL is null and = null

这两者之间有什么区别?

where x is null

where x = null

为什么后者无效?

0
0 Comments

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。

0
0 Comments

在SQL中,使用比较运算符(例如=,!=,<等)比较一个null值和任何其他值(包括另一个null)将导致一个null,在where子句中被视为false(严格来说,它是“不是真的”,而不是“false”,但效果相同)。

这是因为null表示“未知”,所以与null进行任何比较的结果也是“未知”。因此,编码where my_column = null将不会返回任何行。

SQL提供了一种特殊的语法来测试列是否为null,即通过is nullis 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(未知)。

0
0 Comments

在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进行等值比较。这样可以避免出现问题,并得到正确的结果。

0