天天看點

T-SQL:是NULL不是NULL(七)

首先SQL SERVER 是一個三值邏輯 即謂詞計算結果為TRUE,FALSE,UNKNOWN 

标準的謂詞都是遵循這種規則的

如 slary>0  會傳回計算結果為TRUE 結果的行拒絕FALSE和UNKNOWN 結果

   但不是所有的謂詞處理都是這樣的  如果出現在CHECK限制中   計算結果為不為FALSE 拒絕FALSE 意味着接受TRUE和UNKNOWN

TRUE 和FALSE 我們都知道什麼意思 那 UNKNOWN 具體怎麼避免呢?

1.UNKNOWN 

IS UNKNOWN  得到結果 NULL  這很正常   NOT IS 取反結果 還NULL  這讓人很費解 NOT UNKNOWN依舊等于UNKNOWN

NULL=NULL 計算結果為UNKNOWN  NULL表示缺失,簡單點說就是 一未知的值不可能等于另一個未知的值

是以 SQL 提供兩個謂詞 來判斷是不是NULL  IS NULL 和 IS NOT NULL  替代=NULL <>NULL

記住  <>    計算結果不包括空 例如

SELECT custid, country, region, city
FROM Sales.Customers
WHERE region <> N'WA';      
T-SQL:是NULL不是NULL(七)
T-SQL:是NULL不是NULL(七)

可以看到第一幅圖并無NULL 行

接着我們查詢為NULL的

SELECT custid, country, region, city
FROM Sales.Customers
WHERE region = NULL;      
T-SQL:是NULL不是NULL(七)

是以我們用 IS NULL 代替 =

SELECT custid, country, region, city
FROM Sales.Customers
WHERE region IS NULL;      
T-SQL:是NULL不是NULL(七)

如果想反回 不等于 wa 包括NULL 

SELECT custid, country, region, city
FROM Sales.Customers
WHERE region <> N'WA'
   OR region IS NULL;      
T-SQL:是NULL不是NULL(七)

奇怪的是 在分組和排序謂詞中 NULL=NULL 是成立的

在 唯一限制中 NULL 也是被認為相等的

從此山高路遠,縱馬揚鞭。願往後旅途,三冬暖,春不寒,天黑有燈,下雨有傘。此生盡興,不負勇往。