NULL 値

NULL 値は、値が認識できないことを示します。NULL 値は、空値または値 0 とは異なります。2 つの NULL 値は等しいとは限りません。2 つの NULL 値、または NULL 値と他の値を比較する場合、どの NULL 値も認識できないので、認識できないことを示す値が返されます。

NULL 値は、通常、認識されないデータ、適用できないデータ、または後から追加されるデータを示します。たとえば、受注時には顧客のミドル名イニシャルはわかりません。

次に NULL 値についての注意事項を示します。

  • クエリ内で NULL 値を調べるには、WHERE 句で IS NULL または IS NOT NULL を使用します。

  • SQL Server Management Studio コード エディタでクエリ結果を表示するとき、結果セットでは NULL 値は NULL と表示されます。

  • NULL 値を列に挿入するには、INSERT ステートメントまたは UPDATE ステートメントで NULL を明示的に記述するか、INSERT ステートメントの外に列を置くか、ALTER TABLE ステートメントを使用して新しい列を既存テーブルに追加します。

  • テーブル内のある行と別の行を区別するのに必要な、主キーなどの情報に NULL 値を使用することはできません。

プログラム コードでは、NULL 値をチェックして、必ず NULL でない有効なデータを持つ行に特定の計算を行うようにすることができます。たとえば、NULL 以外のデータがある社会保障列だけをレポートに印刷できます。計算実行時に NULL 値を削除することが必要な場合があります。平均値などの計算では、NULL 列が含まれていると正確な結果を得ることができません。

NULL 値がデータに格納されていて、データに NULL 値を表示しない場合、NULL を削除するか NULL を他の値に変換するクエリやデータ変更ステートメントを作成する必要があります。

重要な注意事項重要

メンテナンス、および既存のクエリやレポートに及ぼす影響を最小限にするには、NULL 値をできる限り使用しないことをお勧めします。また、NULL 値の影響をあまり受けないようにクエリやデータ変更ステートメントを使用してください。

データに NULL 値がある場合、論理演算子と比較演算子は、TRUE や FALSE ではなく UNKNOWN を返すことがあります。このように 3 つの値を生成するロジックは、アプリケーション エラーの原因になります。次の表は、NULL 比較を採用した場合の結果を示しています。

次の表に、2 つのブール型オペランドに AND 演算子を適用した結果を示します。

AND

TRUE

UNKNOWN

FALSE

TRUE

TRUE

UNKNOWN

FALSE

UNKNOWN

UNKNOWN

UNKNOWN

FALSE

FALSE

FALSE

FALSE

FALSE

次の表に、2 つのブール型オペランドに OR 演算子を適用した結果を示します。

OR

TRUE

UNKNOWN

FALSE

TRUE

TRUE

TRUE

TRUE

UNKNOWN

TRUE

UNKNOWN

UNKNOWN

FALSE

TRUE

UNKNOWN

FALSE

次の表は、NOT 演算子によりブール演算子の結果が否定または反転される方法を示します。

NOT 演算子が適用されるブール式

評価結果

TRUE

FALSE

UNKNOWN

UNKNOWN

FALSE

TRUE

ISO 規格では、NULL 値の有無を調べるため、IS NULL と IS NOT NULL のキーワードが使用されています。

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 と NULL 以外のデータ値を比較すると、FALSE と評価されます。