首先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';

可以看到第一幅圖并無NULL 行
接着我們查詢為NULL的
SELECT custid, country, region, city
FROM Sales.Customers
WHERE region = NULL;
是以我們用 IS NULL 代替 =
SELECT custid, country, region, city
FROM Sales.Customers
WHERE region IS NULL;
如果想反回 不等于 wa 包括NULL
SELECT custid, country, region, city
FROM Sales.Customers
WHERE region <> N'WA'
OR region IS NULL;
奇怪的是 在分組和排序謂詞中 NULL=NULL 是成立的
在 唯一限制中 NULL 也是被認為相等的
從此山高路遠,縱馬揚鞭。願往後旅途,三冬暖,春不寒,天黑有燈,下雨有傘。此生盡興,不負勇往。