我对SQL中= null和is null不同的原因有一个初步的了解,这得益于像this one这样的问题。 但是,为什么 update table set column = null 一个有效的SQL语句(至少在Oracle中)是什么? 从那个答案中,我知道null可以被视为某种“未知”,因此带有where column = null的SQL语句“应该”返回所有行,因为column的值不再是未知值。 我明确将其设置为null ;) 我错在哪里/理解不正确? 所以,如果我的问题可能不清楚: 为什么= null在SQL语句的set子句中是有效的,但在where子句中无效?
SQL没有像c或java这样的语言那样为赋值和等于运算符使用不同的图形符号。在这些语言中,=是赋值运算符,而==是相等运算符。在SQL中,=用于两种情况,并根据上下文进行解释。 在where子句中,=充当相等运算符(类似于C中的==)。也就是说,它检查两个操作数是否相等,如果相等则返回true。正如您所提到的,null不是一个值-它是缺少值。因此,它不能等于任何其他值。 在set子句中,=作为赋值运算符(类似于C语言中的=)。也就是说,它将左操作数(列名)设置为右操作数的值。这是一个完全合法的语句 - 您声明您不知道某个列的值。