4.3.4 空值(NULL)的判斷——IS [NOT] NULL
通過前面的學(xué)習(xí)可知,除非在創(chuàng)建時(shí)指定了NOT NULL約束,數(shù)據(jù)庫表中某些列的值可以為NULL。什么是NULL?顧名思義,NULL就是空,在數(shù)據(jù)庫中,含有空值的表的列的長度為零。
具體來講,NULL與0、空字符串、空格都不同,等價(jià)于沒有任何值,是未知數(shù)。然而,NULL卻是一個(gè)數(shù)據(jù)值,而且它屬于一個(gè)域。例如一個(gè)字符串字段,其中的NULL只能是一個(gè)字符串。盡管它的內(nèi)容沒有定義,或者未知,但它是字符串,這一點(diǎn)無可置疑。
對(duì)于NULL,一般的運(yùn)算,比如加、減、乘、除,都會(huì)返回NULL。永遠(yuǎn)不會(huì)有什么數(shù)據(jù)等于NULL。當(dāng)然,1不等于NULL,2也一樣。注意,NULL也不等于NULL,說一個(gè)NULL等于NULL是錯(cuò)誤的。
在SQL中,表達(dá)式“X=NULL”,結(jié)果應(yīng)當(dāng)是UNKOWN。而表達(dá)式“X IS NULL”,就得看情況,如果X是NULL,就返回TRUE;X不為NULL,則返回FALSE。
因此,在WHERE子句中,判斷一個(gè)值是否為NULL,只能采用IS [NOT] NULL判別式。下面通過具體實(shí)例說明IS [NOT] NULL判別式的用法。
實(shí)例19 使用IS [NOT] NULL判別式處理NULL值
本實(shí)例將實(shí)現(xiàn)實(shí)例17提出的查詢功能,即在BookInfo表中,查詢圖書讀者的讀者編號(hào)不大于9704(包括沒有讀者,為NULL)的所有圖書記錄,代碼如下:
USE Library |
圖4.20 查詢結(jié)果 |
可見,相比實(shí)例17,此時(shí)才得到了正確的結(jié)果。
★ 說明 ★
SAL IS NULL不可以寫成SAL=NULL;除了IS [NOT] NULL之外,空值不滿足任何查找條件;如果NULL參與算術(shù)運(yùn)算,則該算術(shù)表達(dá)式的值為NULL;如果NULL參與比較運(yùn)算,則結(jié)果為UNKNOWN;如果NULL參與聚集運(yùn)算,則除count(*)之外其他聚集函數(shù)都忽略NULL。