SQL Server空值比較的實際搜索條件
以下的文章主要向大家講述的是SQL Server空值比較的實際搜索條件,NULL 值表示列的相關(guān)數(shù)據(jù)值未知或是不可用。NULL 值和零(數(shù)字值或二進制值)、零長度的字符串或空白(字符值)的含義不同。
相反,空值可用于區(qū)分輸入的是零(數(shù)字列)或空白(字符列)還是無數(shù)據(jù)輸入(NULL 可用于數(shù)字列和字符列)。
可以通過以下兩種方式在允許空值的列中輸入 NULL 值(根據(jù) CREATE TABLE 語句的指定):
如果無數(shù)據(jù)輸入并且列或數(shù)據(jù)類型上無默認(rèn)的或 DEFAULT 約束,Microsoft® SQL Server™ 2000 將自動輸入 NULL 值。
通過鍵入不帶引號的 NULL 顯式輸入 NULL 值。如果在字符列中鍵入帶引號的 NULL,則將其視為字母 N、U、L、L 而非空值。
當(dāng)檢索到空值時,應(yīng)用程序通常會在適當(dāng)?shù)奈恢蔑@示 NULL 或 (NULL) 或 (null) 這樣的字符串。例如,titles 表中的 advance 列允許空值:
- SELECT title_id, type, advance FROM pubs.dbo.titles WHERE advance IS NULL
下面是結(jié)果集:
- title_id type advance -------- ------------ ------- MC3026 UNDECIDED (null) PC9999 popular_comp (null) (2 row(s) affected)
比較空值
比較空值時必須小心。比較行為取決于選項 SET ANSI_NULLS 的設(shè)置。
當(dāng)
- SET ANSI_NULLS 為> ytd_sales > NULL
只要變量包含 NULL 值,下列比較也輸出 UNKNOWN:
- ytd_sales > @MyVariable
使用 IS NULL 或 IS NOT NULL 子句測試 NULL 值。這將增加 WHERE 子句的復(fù)雜性。例如,表 Northwind Customers 中的 Region 列允許空值。如果使用 SELECT 語句不僅測試其它值還測試SQL Server空值比較則必須包括 IS NULL 子句:
- SELECT CustomerID, CompanyName, Region FROM Northwind.dbo.Customers WHERE Region IN ('WA', 'SP', 'BC') OR Region IS NULL
Transact-SQL 支持在與空值進行比較時,允許比較運算符返回 TRUE 或 FALSE。通過設(shè)置 ANSI_NULLS OFF 可將該選項激活。當(dāng) ANSI_NULLS 為 OFF 時,如果 ColumnA 包含空值,則比較操作 ColumnA = NULL 返回 TRUE;
如果 ColumnA 除包含 NULL 外還包含某些值,則比較操作返回 FALSE。此外,兩個都取空值的表達(dá)式的比較也輸出 TRUE。當(dāng) ANSI_NULLS 設(shè)置為 OFF 時,SELECT 語句將返回 Customer 表中所有 Region 為空值的行:
- SELECT CustomerID, CompanyName, Region FROM Northwind.dbo.Customers WHERE Region = NULL
不論 ANSI_NULLS 如何設(shè)置,對于 ORDER BY、GROUP BY 和 DISTINCT 關(guān)鍵字空值總被視為是相等的。此外,允許 NULL 的唯一索引或 UNIQUE 約束只能包含一個帶有 NULL 鍵值的行。后面帶有 NULL 的行將被拒絕。屬于主鍵的任何列中都不能含有 NULL。
涉及 NULL 的計算均取值為 NULL,這是因為只要有一個因子為未知,結(jié)果肯定是 UNKNOWN。例如,如果 column1 為 NULL,則 column1 + 1 取值為 NULL。
當(dāng)搜索的列中包括定義為允許空值的列時,可以通過下列模式查找數(shù)據(jù)庫中的空值或非空值。
- WHERE column_name IS [NOT] NULL
以上的相關(guān)內(nèi)容就是對SQL Server空值比較搜索條件的介紹,望你能有所收獲。
【編輯推薦】