sql server 2008 NULL值

SQL支持用NULL符號來表示缺乏的值,它使用的是三值謂詞邏輯,計算結果但是以TURE、FALSE或UNKNOWN。排序

SQL中不一樣語言元素處理NULL和UNKNOWN的方式也有所不一樣,若是邏輯表達式只涉及已經存在的值,那麼最終的計算結果只有二種,要麼TRUE要麼FALSE。可是當邏輯表達式涉及缺乏的值時,其計算結果就是UNKNOWN。如,當謂詞salary>0:當salary等於1000時,表達式結果爲TRUE,查詢過濾條件(WHERE和HAVING子句)可以讓表達式計算結果爲TRUE的那些行或組被返回;當salary等於-100時,表達式計算結果爲FALSE,查詢過濾條件(WHERE和HAVING子句)可以讓表達式計算結果爲FALSE的那些行或組被返回;當salary是NULL時,表達式的計算結果就是UNKNOWN,查詢過濾條件(WHERE和HAVING子句)不返回任何行。查詢

在不一樣的語言元素中,SQL對UNKNOWN的處理也有所不一樣。SQL對查詢過濾條件處理的正肯定義是:「接受TRUE」就意味着要過濾掉FALSE和UNKNOWN。反之,對SQL對CHECK約束處理的正肯定義是:「拒絕FALSE」就意味着接受TRUE和UNKNOWN。若是SQL使用的是二值謂詞邏輯,那麼「接受TRUE」和「拒絕FALSE」就不會有什麼區別。但在三值謂詞邏輯中,「接受TRUE」則會拒絕UNKNOWN和FALSE,而拒絕FALSE則會接受UNKNOWN和TRUE。前面的例子使用了謂詞salary>0,一個取值爲NULL的salary將致使表達式計算結果爲UNKNOWN。若是這個謂詞出如今查詢的WHERE子句中,則salary列取值爲NULL的行也將會過濾掉。若是在表的CHECK約束中也包含這個謂詞條件,則salary列取值爲NULL的行也將被過濾掉。語言

UNKNOWN對它取反時,結果仍是UNKNOWN。兩個NULL值進行比較的表達式,其計算結果仍是UNKNOWN。由於NULL值表明一個缺乏的值或不可知的值,爲此SQL提供了兩個謂詞IS NULL和IS NOT NULL,用來取代=NULL和<>NULL。

在用於比較和排序目的的不一樣元素中,SQL處理NULL的方式也有所不一樣,一些元素認爲兩個NULL值彼此相等,而另外一些則認爲這它們不相等。

例如,當進行分組和排序時,認爲二個NULL值是相等的。也就是說GROUP BY子句會在每一個組中從新組織全部的NULL值,就像有具體值的列同樣;

相關文章
相關標籤/搜索