我从this one等问题粗略了解SQL中= null
和is null
不相同的原因。
但是,为什么
update table
set column = null
一个有效的SQL语句(至少在Oracle中)?
从那answer开始,我知道null
可以被视为有些"未知"因此,sql-statement与where column = null
"应该"返回所有行,因为column
的值不再是未知值。我明确地将它设置为null
;)
我错在哪里/不明白?
所以,如果我的问题可能不清楚:
为什么= null
在set
子句中有效,而在SQL语句的where
子句中没有?
答案 0 :(得分:6)
他们是完全不同的运营商,即使你以同样的方式写它们。
分配运算符allosw“清除”列中的数据并将其设置为“空值”。
答案 1 :(得分:6)
SQL没有用于赋值的不同图形符号,而像c或java这样的语言具有相等的运算符。在此类语言中,=
是赋值运算符,而==
是等于运算符。在SQL中,=
用于两种情况,并在上下文中进行解释。
在where
子句中,=
充当相等运算符(类似于C中的==
)。即,它检查两个操作数是否相等,如果是,则返回true
。正如您所提到的,null
不是一个值 - 它缺乏价值。因此,它不能等于任何其他值。
在set
子句中,=
充当赋值运算符(类似于C中的=
)。即,它使用右操作数的值设置左操作数(列名)。这是完全合法的陈述 - 您声明您不知道某列的价值。
答案 2 :(得分:2)
在set子句中,您将值分配给NULL,由NULL定义。在where子句中,您要查询未知的内容。当你不知道什么是未知数时,你不能指望任何结果。