2015-04-23 49 views
4

我对SQL中的= nullis nullthis one等问题不一样有着粗略的理解。为null与等于null

但随后,为什么

update table 
set column = null 

有效的SQL语句(至少在甲骨文)?

从这个answer,我知道null可以被看作是有些“未知”,因此和SQL语句与where column = null“应该”返回所有行,因为column的价值不再是一个未知的值。我明确地将其设置为null;)

我在哪里错了/不明白?

所以,如果我的问题是,也许不清楚: 为什么= null有效的set子句中,而不是在一个SQL语句的where条款?

回答

6

SQL没有用于赋值的不同图形符号,并且运算符类似于等语言。在这些语言中,=赋值运算符,而==等于运算符。在SQL中,=用于这两种情况,并在上下文中解释。

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

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

+0

所有正确的答案,但你提供最多的上下文。谢谢! –

6

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

  • 在where子句,是comparsion操作者
  • 在一组中,一个赋值运算符

的分配新建分配FY操作者allosw“清除”,在列中的数据和将其设置为“空值”。

2

在set子句中,您将值分配给未定义的值,如NULL定义。在where子句中,你正在查询一个未知数。当你不知道未知的是什么时,你不能指望它有任何结果。