SQL Server中NULL的一個測試


我們都知道SQL Server中NULL是一個很特殊的存在,因為NULL不會等於任何值,且NULL也不會不等於任何值。對於NULL我們只能使用IS或IS NOT關鍵字來進行比較。

 

我們先來看看下面一個SQL查詢,由於NULL不會等於任何值,所以毫無疑問下面的查詢會返回0:

SELECT CASE WHEN NULL=1 THEN 1 ELSE 0 END

輸出結果:

 

那么如果我們在上面查詢的基礎上,給判斷條件NULL=1前加上NOT關鍵字效果如何呢?如下所示:

SELECT CASE WHEN NOT NULL=1 THEN 1 ELSE 0 END

輸出結果:

我們可以看到輸出還是0,有些同學可能會覺得很奇怪,判斷條件NULL=1不是返回False嗎,那么NOT NULL=1應該返回True才對啊?那么我們試試在判斷條件NULL=1前加兩個NOT關鍵字試試:

SELECT CASE WHEN NOT NOT NULL=1 THEN 1 ELSE 0 END

輸出結果:

結果顯示判斷條件NOT NOT NULL=1,還是返回的False,事實上無論我們在NULL=1前面加多少個NOT關鍵字,判斷條件NOT ... NOT NULL=1都會返回False。

因為我們前面說了NULL不會等於任何值,且NULL也不會不等於任何值,所以除了用IS或IS NOT關鍵字來比較NULL,所有其它比較運算符對NULL進行的比較都是無效的,NULL會讓整個表達式都返回False,所以無論我們在判斷條件NULL=1前面加多少個NOT關鍵字都沒有用,因為整個NOT ... NOT NULL=1表達式都會返回False。

 

雖然上面我們看到NULL會讓整個判斷表達式都返回False,但是它並不會干擾由OR或AND關鍵字分隔的其它判斷條件,例如:

SELECT CASE WHEN (NOT NOT NULL=1) OR (1=1 AND 2=2) THEN 1 ELSE 0 END

輸出結果:

 


免責聲明!

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



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