指定した値のリストと比較(IN句)

条件式を記述する時に IN 句を使用すると、カラムの値が複数の値のいずれかと一致するかどうかという条件式を記述することができます。ここでは SQLite で IN 句を使った条件式の記述方法について解説します。

条件式を記述するときに使用する WHERE 句については「取得するデータの条件を設定(WHERE句)」を参照されてください。

(Last modified: )

IN句を使った条件式

IN 句を使用すると値をリストのように記述しておき、このリストの中のいずれかの値に一致するかどうかを調べることができます。書式は次の通りです。

SELECT カラム名 , ... FROM テーブル名
  WHERE カラム IN(値1, 値2, ...);

カラムの値が IN 句で指定された値1、値2、...のいずれにかに一致した場合にデータを取得します。これは比較演算子と論理演算子を使って次のように記述した場合と同じです。

SELECT カラム名 , ... FROM テーブル名
  WHERE カラム = 値1 OR カラム = 値2 OR ...;

また NOT 演算子を組み合わせることで指定した値のリストに含まれて居ない場合のデータを取得することもできます。

SELECT カラム名 , ... FROM テーブル名
  WHERE カラム NOT IN(値1, 値2, ...);

----

それでは実際に試してみます。次のようなテーブルを作成しました。

create table user(id integer, name text, address text);

IN句を使った条件式(1)

INSERT 文を使ってテーブルにデータをいくつか格納しておきます。

insert into user values(1, 'Suzuki', 'Osaka');
insert into user values(2, 'Yamada', 'Tokyo');
insert into user values(3, 'Kudou', 'Chiba');
insert into user values(4, 'Ushijima', 'Nagoya');
insert into user values(5, 'Hanada', 'Saitama');
insert into user values(6, 'Okamoto', 'Sapporo');
insert into user values(7, 'Shima', 'Tokyo');

IN句を使った条件式(2)

取得するデータの条件を指定しないでデータを取得した場合は次のようになります。

select * from user;

IN句を使った条件式(3)

それでは IN 句を使って条件に一致する値のリストを指定してみます。次の例では address カラムの値が 'Tokyo' 、'Chiba' 、 'Saitama' に一致するデータを取得しています。

select * from user where address in('Tokyo', 'Chiba', 'Saitama');

IN句を使った条件式(4)

条件に一致したデータを取得することができました。

他のテーブルから取得した値のリストと比較

比較する値のリストとして、値を1つ1つ並べて記述する以外に他のテーブルから SELECT 文を使って値のリストを取得し一致するかどうか比較することもできます。書式は次の通りです。

SELECT カラム名 , ... FROM テーブル名
  WHERE カラム IN(SELECT カラム名 FROM テーブル名);

IN 句の中に記述した SELECT 文は1つのカラムの値だけを取得するようにしなければなりません。カラムの値が IN 句の中の SELECT 文によって取得された値のリストのいずれかに一致する場合にデータを取得します。

それでは実際に試してみます。次のようなテーブルを作成しました。

create table kantou(id integer, pref text);

他のテーブルから取得した値のリストと比較(1)

INSERT 文を使ってテーブルにデータをいくつか格納しておきます。

insert into kantou values(1, 'Tokyo');
insert into kantou values(2, 'Chiba');
insert into kantou values(3, 'Saitama');
insert into kantou values(4, 'Kanagawa');

他のテーブルから取得した値のリストと比較(2)

それでは user テーブルから値を取得します。条件式として address カラムの値が kantou テーブルの pref カラムの値のいずれかと一致するように設定します。

select * from user where address in(select pref from kantou);

他のテーブルから取得した値のリストと比較(3)

条件に一致するデータを取得することができました。

-- --

IN 句を使ってカラムの値が複数の値のいずれかと一致するかどうかという条件式を記述する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。