为空与等于空
is null vs. equals null
从this one.
这样的问题,我大概明白了为什么SQL中的= null
和is null
不一样
但是,为什么
update table
set column = null
有效的 SQL 语句(至少在 Oracle 中)?
从那个 answer,我知道 null
可以被看作是某种 "UNKNOWN",因此 sql-statement with where column = null
"should" return 所有行,因为 column
的值不再是未知值。我明确地将其设置为 null
;)
我哪里错了/没看懂?
所以,如果我的问题可能不清楚:
为什么 = null
在 set
子句中有效,但在 SQL 语句的 where
子句中无效?
它们完全不同的运算符,即使您以相同的方式编写它们也是如此。
- 在 where 子句中,是 比较运算符
- 在集合中,是一个赋值运算符
赋值运算符允许 "clear" 列中的数据并将其设置为 "null value" .
在 set 子句中,您将值分配给由 NULL 定义的未知数。在 where 子句中,您正在查询一个未知数。当你不知道未知数是什么时,你就不能指望它有任何结果。
SQL 没有像 c or java 等语言那样的赋值和相等运算符的不同图形符号。在这些语言中,=
是 赋值运算符 ,而 ==
是 相等运算符 。在 SQL 中,=
用于两种情况,并根据上下文进行解释。
在where
子句中,=
充当相等运算符(类似于C 中的==
)。即,它检查两个操作数是否相等,如果相等,则 returns true
。正如您提到的,null
不是一个值——它是缺少一个值。因此,它不能等于任何其他值。
在set
子句中,=
充当赋值运算符(类似于C中的=
)。即,它将左操作数(列名)设置为右操作数的值。这是一个完全合法的声明——您声明您不知道某个列的值。
从this one.
这样的问题,我大概明白了为什么SQL中的= null
和is null
不一样
但是,为什么
update table
set column = null
有效的 SQL 语句(至少在 Oracle 中)?
从那个 answer,我知道 null
可以被看作是某种 "UNKNOWN",因此 sql-statement with where column = null
"should" return 所有行,因为 column
的值不再是未知值。我明确地将其设置为 null
;)
我哪里错了/没看懂?
所以,如果我的问题可能不清楚:
为什么 = null
在 set
子句中有效,但在 SQL 语句的 where
子句中无效?
它们完全不同的运算符,即使您以相同的方式编写它们也是如此。
- 在 where 子句中,是 比较运算符
- 在集合中,是一个赋值运算符
赋值运算符允许 "clear" 列中的数据并将其设置为 "null value" .
在 set 子句中,您将值分配给由 NULL 定义的未知数。在 where 子句中,您正在查询一个未知数。当你不知道未知数是什么时,你就不能指望它有任何结果。
SQL 没有像 c or java 等语言那样的赋值和相等运算符的不同图形符号。在这些语言中,=
是 赋值运算符 ,而 ==
是 相等运算符 。在 SQL 中,=
用于两种情况,并根据上下文进行解释。
在where
子句中,=
充当相等运算符(类似于C 中的==
)。即,它检查两个操作数是否相等,如果相等,则 returns true
。正如您提到的,null
不是一个值——它是缺少一个值。因此,它不能等于任何其他值。
在set
子句中,=
充当赋值运算符(类似于C中的=
)。即,它将左操作数(列名)设置为右操作数的值。这是一个完全合法的声明——您声明您不知道某个列的值。