目次
複数の値を条件にする(in)
サンプル
select * from employee
where name in ('鈴木','田中');
解説
select * from テーブル名 where 項目名 in (値1,値2,・・・) |
inを使用すると複数の値の指定がシンプルになります。
上記サンプルの場合、where name = '鈴木' or name = '田中'という意味になります。
使用例
employeeテーブルの'鈴木'と'田中'の行をinを使用して取得します。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
以下のSQLを実行します。
select * from employee
where name in ('鈴木','田中');
2行目は、inを指定しています。
項目「name」に鈴木または田中がある行を抽出します。
結果は、以下のとおりです。
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のあとに副問合せを指定することもできます。
使用例
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行目の条件にしています。
結果は、以下のとおりです。
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に指定できます。
使用例
以下のテーブルがあるとします。
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つの項目を条件にしています。
結果は、以下のとおりです。
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の否定になります。
使用例
以下のテーブルがあるとします。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
上記テーブルに対して条件にnot inを使用し値を複数指定します。
select * from employee
where name not in ('鈴木','田中');
2行目は、not inを指定しています。
項目「name」に鈴木または田中がない行を抽出します。
結果は、以下のとおりです。
id | name | romaji |
---|---|---|
3 | 佐藤 | sato |
関連の記事
SQL distinct 重複行を表示しないサンプル
SQL 複数の行をまとめる(集約関数/group by/having)