2015-04-23 46 views
4

我對SQL中的= nullis nullthis one等問題不一樣有着粗略的理解。爲null與等於null

但隨後,爲什麼

update table 
set column = null 

有效的SQL語句(至少在甲骨文)?

從這個answer,我知道null可以被看作是有些「未知」,因此和SQL語句與where column = null「應該」返回所有行,因爲column的價值不再是一個未知的值。我明確地將其設置爲null;)

我在哪裏錯了/不明白?

所以,如果我的問題是,也許不清楚: 爲什麼= null有效的set子句中,而不是在一個SQL語句的where條款?

回答

6

SQL沒有用於賦值的不同圖形符號,並且運算符類似於等語言。在這些語言中,=賦值運算符,而==等於運算符。在SQL中,=用於這兩種情況,並在上下文中解釋。

where子句中,=充當相等運算符(類似於C中的==)。即,它檢查兩個操作數是否相等,如果是,則返回true。正如你所提到的,null不是一個價值 - 它是缺乏價值。因此,它不能等於任何其他值。

set子句中,=充當賦值運算符(類似於C中的=)。即,它使用右操作數的值設置左操作數(列名稱)。這是一個完美的法律聲明 - 你聲明你不知道某一列的價值。

+0

所有正確的答案,但你提供最多的上下文。謝謝! –

6

他們完全不同的運營商,即使你以相同的方式寫他們。

  • 在where子句,是comparsion操作者
  • 在一組中,一個賦值運算符

的分配新建分配FY操作者allosw「清除」,在列中的數據和將其設置爲「空值」。

2

在set子句中,您將值分配給未定義的值,如NULL定義。在where子句中,你正在查詢一個未知數。當你不知道未知的是什麼時,你不能指望它有任何結果。