Sql 是空还是等于空
我大致了解了为什么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
=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中的=
)。即,它用右操作数的值设置左操作数(列名)。这是一个完全合法的声明-您声明您不知道某个列的值 所有答案都是正确的,但你的答案提供了最多的上下文。谢谢