SQLのselect文のin句で、複数の値を条件にするサンプルです。
目次
サンプル | 複数の値を条件にする(in) |
in + 副問合せ(サブクエリ)の場合 | |
複数の値を条件にする+否定(not in) |
複数の値を条件にする(in)
select * from テーブル名 where 項目名 in (値1,値2,・・・) |
select文の条件にinを使用すると複数の値の指定がシンプルになります。
以下のテーブルがあるとします。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
SQL
上記テーブルに対して条件にinを使用し値を複数指定します。
select * from syain
where name in ('鈴木','田中');
2行目は、inを指定しています。
項目「name」に鈴木または田中がある行を抽出します。
結果
結果は、以下のとおりです。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
上記のinをorで書いた場合
上記のinをorで書いた場合、以下のようになります。
select * from syain
where name = '鈴木' or name = '田中';
項目の「name」を都度書くので冗長になってしまいます。
in + 副問合せ(サブクエリ)の場合
inのあとに副問合せを指定することもできます。
以下のテーブルがあるとします。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
SQL
上記テーブルに対してinのあとに副問合せを指定します。
select * from syain
where name in
(
select name from syain
where romaji like '%a%'
);
副問い合わせとは、あるselect文の結果を別のSQL文で利用することです。
4,5行目で取得した結果を2行目の条件にしています。
結果は、以下のとおりです。
id | name | romaji |
---|---|---|
2 | 田中 | tanaka |
3 | 佐藤 | sato |
in + 副問合せ(サブクエリ)の結果の複数の項目を使用する
副問合せの結果の複数の項目をinに指定できます。
以下のテーブルがあるとします。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
SQL
select * from syain
where (name,romaji) in
(
select name,romaji from syain
where romaji like '%a%'
);
2,4行目は、nameとromajiの2つの項目を条件にしています。
結果は、以下のとおりです。
id | name | romaji |
---|---|---|
2 | 田中 | tanaka |
3 | 佐藤 | sato |
複数の値を条件にする+否定(not in)
select * from テーブル名 where 項目名 not in (値1,値2,・・・) |
select文の条件にnot inを使用するとinの否定になります。
以下のテーブルがあるとします。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
SQL
上記テーブルに対して条件にnot inを使用し値を複数指定します。
select * from syain
where name not in ('鈴木','田中');
2行目は、not inを指定しています。
項目「name」に鈴木または田中がない行を抽出します。
結果
結果は、以下のとおりです。
id | name | romaji |
---|---|---|
3 | 佐藤 | sato |
関連の記事
SQL distinct 重複行を表示しないサンプル
SQL 複数の行をまとめる(集約関数/group by/having)