SQLite | データの検索 | NULL値の行を検索する(IS NULL)
IS NULL句を使うと、カラムにNULLが格納されているかどうかを判定できます。ここでは、IS NULLを使った条件式の書き方を説明します。
WHERE句については、検索条件を設定する(WHERE句)を参照してください。
IS NULL句を使った条件式
IS NULLを使うと、カラム値がNULLかどうかを判定できます。構文は次のとおりです。
SELECT カラム名, ... FROM テーブル名 WHERE カラム名 IS NULL;
カラム値がNULLの行だけを取得します。IS NULLの代わりにISNULLも使用できます。
カラム値がNULLではない行を検索するには、IS NOT NULLを使います。
SELECT カラム名, ... FROM テーブル名 WHERE カラム名 IS NOT NULL;
カラム値がNULLではない行だけを取得します。SQLiteではNOTNULLとNOT NULLも使用できます。
–
実際に試してみます。次のテーブルを作成します。
create table user (id integer, name text, address text);
sqlite> create table user (id integer, name text, address text);
sqlite>
INSERT文でテーブルにデータを追加します。
insert into user values (1, 'devkuma', 'Seoul');
insert into user values (2, 'kimkc', null);
insert into user values (3, 'araikuma', 'Busan');
insert into user values (4, 'happykuma', 'Daejeon');
insert into user values (5, 'mykuma', null);
sqlite> insert into user values (1, 'devkuma', 'Seoul');
sqlite> insert into user values (2, 'kimkc', null);
sqlite> insert into user values (3, 'araikuma', 'Busan');
sqlite> insert into user values (4, 'happykuma', 'Daejeon');
sqlite> insert into user values (5, 'mykuma', null);
sqlite>
条件を指定せずに検索すると、次の結果になります。addressカラムにNULLを含む行があります。
select * from user;
sqlite> select * from user;
id name address
---------- ---------- ----------
1 devkuma Seoul
2 kimkc
3 araikuma Busan
4 happykuma Daejeon
5 mykuma
sqlite>
IS NULLを使い、addressがNULLの行だけを検索します。
select * from user where address is null;
sqlite> select * from user where address is null;
id name address
---------- ---------- ----------
2 kimkc
5 mykuma
sqlite>
addressがNULLの行だけを取得できました。
次にIS NOT NULLを使い、addressがNULLではない行を検索します。
select * from user where address is not null;
sqlite> select * from user where address is not null;
id name address
---------- ---------- ----------
1 devkuma Seoul
3 araikuma Busan
4 happykuma Daejeon
sqlite>
addressがNULLではない行だけを取得できました。
等価演算子(=)でカラム値とNULLを比較しても、正しい結果は得られません。次のSELECT文を実行してみます。
select * from user where address = null;
select * from user where address = NULL;
select * from user where address = '';
sqlite> select * from user where address = null;
sqlite> select * from user where address = NULL;
sqlite> select * from user where address = '';
sqlite>
どのクエリも行を返しません。値がNULLかどうかを調べるにはIS NULLを使用します。