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版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)
- 作者: ミック
- 出版社/メーカー: 翔泳社
- 発売日: 2016/06/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)
- 作者: ミック
- 出版社/メーカー: 翔泳社
- 発売日: 2008/02/07
- メディア: 単行本(ソフトカバー)
- 購入: 54人 クリック: 1,004回
- この商品を含むブログ (78件) を見る
*1:SQL Server Management Studioの[テーブルを編集]で表示される斜体のNULLは文字列ではありません。