SQL SELECT (IN演算子) 複数の値を条件にする

SQLのselect文のin演算子で、複数の値を条件にするサンプルです。

目次

select文 複数の値を条件にする(in)
  複数の値を条件にする+否定(not in)

複数の値を条件にする(in)

select * from テーブル名
where 項目名 in (値1,値2,・・・)

select文の条件にinを使用すると複数の値の指定がシンプルになります。

以下のテーブルがあるとします。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato

SQL

上記テーブルに対して条件にinを使用し値を複数指定します。

select * from syain
where name in ('鈴木','田中');

2行目は、inを指定しています。
項目「name」に鈴木または田中がある行を抽出します。

結果

結果は、以下のとおりです。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka

in + 副問合せ

inのあとに副問合せを指定することもできます。

select * from syain
where name in 
(
select name from syain
where romaji like '%a%'
);

副問い合わせとは、あるselect文の結果を別のSQL文で利用することです。
4,5行目で取得した結果を2行目の条件にしています。

in + 副問合せの結果が複数

select * from syain
where (name,romaji) in 
(
select name,romaji from syain
where romaji like '%a%'
);

副問合せの複数の結果を条件にもできます。

上記のinをorで書いた場合

上記のinをorで書いた場合、以下のようになります。

select * from syain 
where name = '鈴木' or name = '田中';

項目の「name」を都度書くので冗長になってしまいます。

複数の値を条件にする+否定(not in)

select * from テーブル名
where 項目名 not in (値1,値2,・・・)

select文の条件にnot inを使用するとinの否定になります。

以下のテーブルがあるとします。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato

SQL

上記テーブルに対して条件にnot inを使用し値を複数指定します。

select * from syain
where name not in ('鈴木','田中');

2行目は、not inを指定しています。
項目「name」に鈴木または田中がない行を抽出します。

結果

結果は、以下のとおりです。

syainテーブル
id name romaji
3 佐藤 sato

関連の記事

SQL distinct 重複行を表示しないサンプル
SQL 複数の行をまとめる(集約関数/group by/having)

△上に戻る