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

目次

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

サンプル

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

 

解説

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

inを使用すると複数の値の指定がシンプルになります。
上記サンプルの場合、where name = '鈴木' or name = '田中'という意味になります。

 

使用例

employeeテーブルの'鈴木'と'田中'の行をinを使用して取得します。

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

 

以下のSQLを実行します。

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 + 副問合せ(サブクエリ)

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

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

 

使用例

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

上記テーブルに対して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 + 副問合せ(サブクエリ)の結果の複数の項目を使用する

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

副問合せの結果の複数の項目を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 employee
where name not in ('鈴木','田中');

 

解説

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

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

 

使用例

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

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

 

上記テーブルに対して条件に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)

△上に戻る