mamori017.log

歴史的クソブログ

NULLは比較演算子では検索できない

NULLに対して検索を行いたい場合はIS (NOT) NULLを使用しなければいけません。 NULLは通常の値とは異なる*1ので、NULLに対して比較演算子("="や"<>")を使用しても結果に反映されません。

ColumnA ColumnB
100 100
200 NULL
300 300
400 400

上記のテーブルに対して以下のクエリを実行した場合、2行目のレコードが該当するので検索結果は1件で返ってきます。

SELECT *
FROM Table
WHERE ColumnB IS NULL

しかし、NULLに対して比較演算子を使用した以下のクエリを実行した場合、2行目のレコードは出力されず検索結果は0件で返ってきます。

SELECT *
FROM Table
WHERE ColumnB = NULL

これはIN演算子なども同様で、NULLを検索対象に含んだとしても検索結果として返ってきません。 IN演算子でNULLを含めたい場合はNULLを除外した条件句にIS NULL条件を追記して対応する必要があります。

SELECT * 
FROM Table 
WHERE (ColumnB IN (100,400) OR ColumnB IS NULL) 

SQL 第2版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)

SQL 第2版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)

*1:SQL Server Management Studioの[テーブルを編集]で表示される斜体のNULLは文字列ではありません。