SQLを使うときによくある間違いは、NULLであるかどうか判定するために 「= NULL」 としてしまうことである。このようにしてもNULLかどうかは判定できない。 NULL値を持つデータのSELECTを行うには、IS NULL、またはIS NOT NULLを使用します。
IS NULLの使い方
NULLであるデータをselectするにはIS NULLを使います。
SELECT * FROM TABLE_NAME WHERE column_name IS NULL
例としてスポーツテーブルからスポーツの列がNULLのデータを取得します。
テーブルの内容
SELECT * FROM SPORTSTABLE;
ID NAME SPORTS
------------------------
0001 YAMADA SOCCER
0002 TANAKA BASEBALL
0003 PENCHAN NULL
0004 SUZUKI TENNIS
0005 TAKAHASHI NULL
SQL
SELECT * FROM SPORTSTABLE WHERE SPORTS IS NULL;
SQLの実行結果
SELECT * FROM SPORTSTABLE WHERE SPORTS IS NULL;
ID NAME SPORTS
------------------------
0003 PENCHAN NULL
0005 TAKAHASHI NULL
IS NOT NULLの使い方
NULLでないデータをselectするにはIS NOT NULLを使います。
SELECT * FROM TABLE_NAME WHERE column_name IS NOT NULL;
例としてスポーツテーブルからスポーツの列がNULLでないデータを取得します。
テーブルの内容
SELECT * FROM SPORTSTABLE;
ID NAME SPORTS
------------------------
0001 YAMADA SOCCER
0002 TANAKA BASEBALL
0003 PENCHAN NULL
0004 SUZUKI TENNIS
0005 TAKAHASHI NULL
SQL
SELECT * FROM SPORTSTABLE WHERE SPORTS IS NOT NULL;
SQLの実行結果
SELECT * FROM SPORTSTABLE WHERE SPORTS IS NOT NULL;
ID NAME SPORTS
------------------------
0001 YAMADA SOCCER
0002 TANAKA BASEBALL
0004 SUZUKI TENNIS
IN句ではNULLが使えない
つぎの例の通りIN句ではNULLを使うことができない。
テーブルの内容
SELECT * FROM SPORTSTABLE;
ID NAME SPORTS
------------------------
0001 YAMADA SOCCER
0002 TANAKA BASEBALL
0003 PENCHAN NULL
0004 SUZUKI TENNIS
0005 TAKAHASHI NULL
ダメなSQLの例
SELECT * FROM SPORTSTABLE WHERE SPORTS IN ('SOCCER','TENNIS','BASEBALL',NULL);
IN句でNULLも取得したい場合にはOR IS NULL を使用しよう。
SELECT * FROM TABLE_NAME WHERE column_name IN (‥) OR column_name IS NULL
SQL
SELECT * FROM SPORTSTABLE WHERE SPORTS IN ('SOCCER','TENNIS','BASEBALL') OR SPORTS IS NULL;
SQLの実行結果
SELECT * FROM SPORTSTABLE WHERE SPORTS IN ('SOCCER','TENNIS','BASEBALL') OR SPORTS IS NULL;
ID NAME SPORTS
------------------------
0001 YAMADA SOCCER
0002 TANAKA BASEBALL
0003 PENCHAN NULL
0004 SUZUKI TENNIS
0005 TAKAHASHI NULL
まとめ
SQLでNULL値を持つデータのSELECTを行うには、IS NULL、またはIS NOT NULLを使用します。ぜひ覚えておきましょう。