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ではNOTNULLNOT 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を使い、addressNULLの行だけを検索します。

select * from user where address is null;
sqlite> select * from user where address is null;
id          name        address   
----------  ----------  ----------
2           kimkc                 
5           mykuma                
sqlite> 

addressNULLの行だけを取得できました。

次にIS NOT NULLを使い、addressNULLではない行を検索します。

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> 

addressNULLではない行だけを取得できました。

等価演算子(=)でカラム値と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を使用します。