SQL in句 複数の値を条件にする

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

目次

サンプル 複数の値を条件にする(in)
  in + 副問合せ(サブクエリ)の場合
  複数の値を条件にする+否定(not in)

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

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

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

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

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

SQL

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

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

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

結果

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

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

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

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

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

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

 

in + 副問合せ(サブクエリ)の場合

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

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

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

SQL

上記テーブルに対してinのあとに副問合せを指定します。

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

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

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

employeeテーブル
id name romaji
2 田中 tanaka
3 佐藤 sato

 

in + 副問合せ(サブクエリ)の結果の複数の項目を使用する

副問合せの結果の複数の項目をinに指定できます。

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

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

SQL

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

2,4行目は、nameとromajiの2つの項目を条件にしています。

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

employeeテーブル
id name romaji
2 田中 tanaka
3 佐藤 sato

 

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

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

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

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

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

SQL

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

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

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

結果

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

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

関連の記事

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

△上に戻る