Sql 是空还是等于空

Sql 是空还是等于空,sql,oracle,null,sql-update,c,java,Sql,Oracle,Null,Sql Update,C,Java,我大致了解了为什么SQL中的=null和为null不一样,这些问题包括 但是,为什么会这样呢 update table set column = null 有效的SQL语句(至少在Oracle中) 从这一点上,我知道null可以被视为某种“未知”,因此带有where column=null“的sql语句应该“返回所有行,因为column的值不再是未知值。我将其显式设置为null) 我哪里错了/不明白 因此,如果我的问题可能不清楚: 为什么=null在SQL语句的set子句中有效,而在wher

我大致了解了为什么SQL中的
=null
为null
不一样,这些问题包括

但是,为什么会这样呢

update table 
set column = null
有效的SQL语句(至少在Oracle中)

从这一点上,我知道
null
可以被视为某种“未知”,因此带有
where column=null
“的sql语句应该“返回所有行,因为
column
的值不再是未知值。我将其显式设置为
null

我哪里错了/不明白

因此,如果我的问题可能不清楚:
为什么
=null
在SQL语句的
set
子句中有效,而在
where
子句中无效?

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

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

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

在set子句中,您将该值指定给一个由null定义的未知值。在where子句中,您正在查询未知的。当你不知道什么是未知时,你就不能期望它有任何结果

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

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


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

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