为null与等于null

Wil*_*her 4 sql oracle null sql-update

我对= nullSQL中的原因有一个粗略的理解,并且is null此类问题不一样.

但是,为什么呢

update table 
set column = null
Run Code Online (Sandbox Code Playgroud)

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

从那个答案,我知道null可以看作有点"UNKNOWN",因此带有where column = null"should"的sql语句返回所有行,因为值column不再是未知值.我null明确地将它设置;)

我错在哪里/不明白?

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

Jot*_*aBe 6

它们完全不同的运算符,即使您以相同的方式编写它们.

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

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


Mur*_*nik 6

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

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

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