SQL中的空值(null)對算術運算、比較運算、集合運算的影響
阿新 • • 發佈:2019-01-28
算術運算
如果算術表示式的任一輸入為空,則該算術表示式(涉及諸如 +、-、* 或 / 的算術運算)結果為空。
例:如果查詢中有一個表示式是r.A + 5, 並且對於關係中某個特定的元組, r.A為空,那麼對此元組來說,該表示式的結果也為空。
比較運算
SQL將涉及空值的任何比較運算的結果視為unknown(既不是謂詞is null,也不是is not null)。unknown是在SQL中除true和false之外的第三個邏輯值。
補充:由於在where子句的謂詞中可以對比較結果使用諸如and、or和not的布林運算,將布林運算擴充套件到可以處理unknown值,運算結果如下:
- and:true and unknown = unknown, false and
- or:true or unknown = true, false or unknown = unknown, unknown or unknown = unknown
- not:not unknown = unknown
可以驗證,如果r.A為空,那麼"1 < r.A" 和 "not (1 < r.A)"的結果都為unknown。
"null = null"會返回unknown,而不是true。
集合運算
在集合運算中,{('A', null), ('A', null)}中的兩個元素會被認為是相同的元素。因此在使用distinct