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 轉換為其他值的查詢和資料修改陳述式。

ms191504.note(zh-tw,SQL.90).gif重要事項:
若要將現有查詢或報表的維護及可能的影響降至最低,您應該盡量少用 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。

請參閱

概念

允許 Null 值
修改資料行屬性

其他資源

AND (Transact-SQL)
NOT (Transact-SQL)
CREATE TABLE (Transact-SQL)
OR (Transact-SQL)
ISNULL (Transact-SQL)
WHERE (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助