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 |
SQL-92 規格では、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 と評価されます。
参照
概念
その他の技術情報
AND (Transact-SQL)
NOT (Transact-SQL)
CREATE TABLE (Transact-SQL)
OR (Transact-SQL)
ISNULL (Transact-SQL)
WHERE (Transact-SQL)