Null 值
NULL 值表示是未知的值。NULL 值與空的值或零值不同。兩個 Null 值永遠不會相等。因為每個 NULL 的值都是未知的,兩個 Null 值之間、或是一個 NULL 與其他任何值之間的比較都會傳回未知的。
Null 值通常會指出未知的資料、不適用的資料或之後將要加入的資料。例如,客戶的稱謂在下訂單時可能是未知的。
下列是 Null 的相關資訊:
- 若要在查詢中測試 Null 值,請在 WHERE 子句中使用 IS NULL 或 IS NOT NULL。
- 在 SQL Server Management Studio 程式碼編輯器中檢視查詢結果時,Null 值會在結果集中顯示為 (null)。
- 可藉由在 INSERT 或 UPDATE 陳述式中明確陳述 NULL、在 INSERT 陳述式中空出資料行,或是在使用 ALTER TABLE 陳述式將新的資料行加入至現有的資料表時,將 Null 值插入資料行。
- Null 值不得用於分辨資料表的某個資料列,以及資料表的另一個資料列時所需的資訊 (例如主索引鍵)。
在程式碼中,您可以檢查 Null 值,以便讓某些計算只會在包含有效 (或不是 NULL) 資料的資料列上執行。例如,只有當社會安全號碼資料行的資料不是 NULL 時,報表才能列印該資料行。在執行計算時,移除 Null 值非常重要,因為某些計算 (例如取平均值) 如果將 NULL 資料行包含在內,結果可能會不正確。
如果 Null 值有可能存放在資料中,而您不希望資料中出現 Null 值,則應該建立移除 NULL 或將 NULL 轉換為其他值的查詢和資料修改陳述式。
![]() |
---|
若要將現有查詢或報表的維護及可能的影響降至最低,您應該盡量少用 Null 值。請妥善規劃您的查詢及資料修改陳述式,以便將 Null 值的影響降至最低。 |
當資料中包含 Null 值時,邏輯與比較運算子可能會傳回第三種結果 UNKNOWN,而非只有 TRUE 或 FALSE。這種三重數值邏輯的需要是造成應用程式錯誤的來源。下表大致說明導入 Null 比較的結果。
下表會顯示將 AND 運算子套用到兩個布林 (Boolean) 運算元的結果。
AND | TRUE | UNKNOWN | FALSE |
---|---|---|---|
TRUE |
TRUE |
UNKNOWN |
FALSE |
UNKNOWN |
UNKNOWN |
UNKNOWN |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
下表會顯示將 OR 運算子套用到兩個布林 (Boolean) 運算元的結果。
OR | TRUE | UNKNOWN | FALSE |
---|---|---|---|
TRUE |
TRUE |
TRUE |
TRUE |
UNKNOWN |
TRUE |
UNKNOWN |
UNKNOWN |
FALSE |
TRUE |
UNKNOWN |
FALSE |
下表會顯示 NOT 運算子如何否定或反轉布林運算子的結果。
套用 NOT 運算子的布林運算式 | 結果 |
---|---|
TRUE |
FALSE |
UNKNOWN |
UNKNOWN |
FALSE |
TRUE |
SQL-92 標準導入關鍵字 IS NULL 與 IS NOT NULL,用來測試是否有 Null 值。
套用 IS NULL 運算子的 布林運算式 | 結果 | 套用 IS NOT NULL 運算子的布林運算式 | 結果 |
---|---|---|---|
TRUE |
FALSE |
TRUE |
TRUE |
NULL |
TRUE |
NULL |
FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
Transact-SQL 亦針對 Null 處理提供了擴充的部分。如果 ANSI_NULLS 選項設定為 OFF,則 Null 之間的比較 (例如 NULL = NULL) 會評估為 TRUE。NULL 與其他任何資料值之間的比較結果為 FALSE。
請參閱
概念
其他資源
AND (Transact-SQL)
NOT (Transact-SQL)
CREATE TABLE (Transact-SQL)
OR (Transact-SQL)
ISNULL (Transact-SQL)
WHERE (Transact-SQL)