为null与等于null

时间:2015-04-23 08:12:01

标签: sql oracle null sql-update

我从this one等问题粗略了解SQL中= nullis null不相同的原因。

但是,为什么

update table 
set column = null

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

从那answer开始,我知道null可以被视为有些"未知"因此,sql-statement与where column = null"应该"返回所有行,因为column的值不再是未知值。我明确地将它设置为null;)

我错在哪里/不明白?

所以,如果我的问题可能不清楚: 为什么= nullset子句中有效,而在SQL语句的where子句中没有?

3 个答案:

答案 0 :(得分:6)

他们是完全不同的运营商,即使你以同样的方式写它们。

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

分配运算符allosw“清除”列中的数据并将其设置为“空值”。

答案 1 :(得分:6)

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

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

set子句中,=充当赋值运算符(类似于C中的=)。即,它使用右操作数的值设置左操作数(列名)。这是完全合法的陈述 - 您声明您不知道某列的价值。

答案 2 :(得分:2)

在set子句中,您将值分配给NULL,由NULL定义。在where子句中,您要查询未知的内容。当你不知道什么是未知数时,你不能指望任何结果。