SQL中的NULL值



除is [not] null之外,空值不滿足任何查找條件。
–如果null參與算術運算,則該算術表達式的值為null。
–如果null參與比較運算,則結果可視為false。在SQL-92中可看成unknown。
–如果null參與聚集運算,則除count(*)之外其它聚集函數都忽略null。
   例:select    sum(SAL)
           from     PROF
   例:select    count(*)
           from     PROF


詳細分析

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並不違反。

 

和NULL值相關的兩個函數

NULLIF:需要兩個參數

例子:NULLIF(a,b)
說明:如果a和b是相等的,那么返回NULL,如果不相等返回a
select NULLIF('eqeqweqwe','1') 結果是eqeqweqwe
select NULLIF(1,1) 結果是NULL
a和b的類型要一致


ISNULL:需要兩個參數

例子:ISNULL(a,b)
說明:如果a和b同時為NULL,返回NULL,如果a為NULL,b不為NULL,返回b,如果a不為NULL,b為NULL返回a,如果a和b都不為NULL

返回a
select ISNULL(null,null)結果是null
select ISNULL(null,33)結果是33
select ISNULL('ddd',null)結果是ddd
select ISNULL(44,33)結果是44

轉載自:http://blog.sina.com.cn/s/blog_6a6eb42d0100ka56.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM