1. 程式人生 > >SQL中的空值(null)對算術運算、比較運算、集合運算的影響

SQL中的空值(null)對算術運算、比較運算、集合運算的影響

算術運算

如果算術表示式的任一輸入為空,則該算術表示式(涉及諸如 +、-、* 或 / 的算術運算)結果為空。

例:如果查詢中有一個表示式是r.A + 5, 並且對於關係中某個特定的元組, r.A為空,那麼對此元組來說,該表示式的結果也為空。

比較運算

SQL將涉及空值的任何比較運算的結果視為unknown(既不是謂詞is null,也不是is not null)。unknown是在SQL中除true和false之外的第三個邏輯值。

補充:由於在where子句的謂詞中可以對比較結果使用諸如andornot的布林運算,將布林運算擴充套件到可以處理unknown值,運算結果如下:

  • and:true and unknown = unknown, false and
    unknown = false, unknown and unknown = unknown
  • or:true or unknown = true, false or unknown = unknown, unknown or unknown = unknown
  • notnot unknown = unknown

可以驗證,如果r.A為空,那麼"1 < r.A" 和 "not (1 < r.A)"的結果都為unknown。

"null = null"會返回unknown,而不是true。

集合運算

在集合運算中,{('A', null), ('A', null)}中的兩個元素會被認為是相同的元素。因此在使用distinct

子句只會保留這樣的相同的元組的一份拷貝。