SQL server中的NULL值

iSQlServer發表於2009-02-25
SQL中的NULL值,表示不知道(UNKNOWN)的資料,用作不知道資料的具體值,或者不知道資料是否存在,或者資料不存在等情況。因為引入了NULL值,故此SQL的邏輯系統是三值邏輯系統——FALSE、TRUE、NULL三種值構成的邏輯系統。
1、OR、AND、NOT真值表
A B A OR B A AND B NOT A
FALSE FALSE FALSE FALSE TRUE
FALSE TRUE TRUE FALSE -
FALSE NULL NULL FALSE -
TRUE FALSE TRUE FALSE FALSE
TRUE TRUE TRUE TRUE -
TRUE NULL TRUE NULL -
NULL FALSE NULL FALSE NULL
NULL TRUE TRUE NULL -
NULL NULL NULL NULL -


  因為NULL當UNKNOWN來理解,因此,當值為NULL時,它既有可能是FALSE也有可能是TRUE。如果計算結果只有一種可能,則取該種可能;如果計算結果既有可能是FALSE,也有可能是TRUE,那麼結果便為NULL。例如,NOT NULL,其結果也有兩種可能,因此NOT NULL的結果是NULL。再例如,NULL AND TRUE,則其結果也有兩種可能,因此NULL AND TRUE的結果是NULL。但是,NULL OR TRUE,或是NULL AND FALSE,前者結果為TRUE,單是一個TRUE出現,便足以知道結果為TRUE;後者結果為FALSE,單是一個FALSE出現,便足以知道結果為FALSE。這是OR和AND的特性決定的。
2、比較運算子及算術運算子中的NULL
  比較運算子及算術運算子中的NULL,會導致運算結果也為NULL。如3+NULL的結果為NULL,NULL>=5的結果為NULL,等等。
3、BETWEEN AND、IN中的NULL
  A BETWEEN B AND C意為A>=B AND A<=C,因此其產生NULL值的情況,可以參照後者判斷。A NOT BETWEEN B AND C相應等價於NOT(A>=B AND A<=C)。
  A IN(B,C,D)意為A=B OR A=C OR A=D,因此其產生NULL值的情況,可以參照後者判斷。A NOT IN(B,C,D)相應等價於NOT(A=B OR A=C OR A=D)。當集合為空時,IN的結果為FALSE,NOT IN的結果則為TRUE。
4、EXISTS、IS NULL
  EXISTS(以及NOT EXISTS)、IS NULL(以及IS NOT NULL),均只產生FALSE或TRUE,而不產生NULL。
5、ANY、ALL
  在一個值與一個集合(一組值)比較時,比較運算子可以加上ANY(或SOME,作用相同)或ALL。
  A>ANY(B,C,D)意為A>B OR A>C OR A>D,因此其產生NULL值的情況,可以參照後者判斷。當集合為空時,ANY的結果為FALSE。
  A>ALL(B,C,D)意為A>B AND A>C AND A>D,因此其產生NULL值的情況,可以參照後者判斷。當集合為空時,ALL的結果為TRUE。
6、WHERE、HAVING、ON條件篩選,與完整性約束檢查
  在WHERE、HAVING、ON條件篩選中,只保留結果為TRUE的,而不處理FALSE及NULL的。但在完整性約束檢查中,只有結果為FALSE的,才違反約束檢查,NULL並不違反。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-557809/,如需轉載,請註明出處,否則將追究法律責任。

相關文章