是 null 和 equals null 的区别

5

我对SQL中= nullis null不同的原因有一个初步的了解,这得益于像this one这样的问题。

但是,为什么

update table 
set column = null

一个有效的SQL语句(至少在Oracle中)是什么?

从那个答案中,我知道null可以被视为某种“未知”,因此带有where column = null的SQL语句“应该”返回所有行,因为column的值不再是未知值。 我明确将其设置为null ;)

我错在哪里/理解不正确?

所以,如果我的问题可能不清楚:

为什么= null在SQL语句的set子句中是有效的,但在where子句中无效?

3个回答

6

它们是完全不同的运算符,即使你以相同的方式写出它们。

  • 在 where 子句中,= 是一个比较运算符
  • 在 set 中,= 是一个赋值运算符

赋值运算符允许“清除”列中的数据并将其设置为“空值”。


6

SQL没有像这样的语言那样为赋值和等于运算符使用不同的图形符号。在这些语言中,=赋值运算符,而==相等运算符。在SQL中,=用于两种情况,并根据上下文进行解释。

where子句中,=充当相等运算符(类似于C中的==)。也就是说,它检查两个操作数是否相等,如果相等则返回true。正如您所提到的,null不是一个值-它是缺少值。因此,它不能等于任何其他值。

set子句中,=作为赋值运算符(类似于C语言中的=)。也就是说,它将左操作数(列名)设置为右操作数的值。这是一个完全合法的语句 - 您声明您不知道某个列的值。

所有的答案都是正确的,但是你的回答提供了最多的上下文。谢谢! - Willi Fischer

2

在set子句中,您将值分配给一个未知对象,这个对象由NULL定义。在where子句中,您正在查询一个未知对象。当您不知道未知对象是什么时,就不能期望得到任何结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接