複数の値に一致する条件式を設定する - IN 演算子の利用
複数の値に一致するレコードを取り出すSQLを紹介します。
概要
複数の値に一致するレコードを取り出す場合は、IN演算子を用いると効果的です。
書式
select ... from ... where (フィールド名) in ('(値1)', '(値2)', '(値3)', ...);
inの後方には問い合わせ文を指定することもできます。
select ... from ... where (フィールド名) in (select ... from ... where ...);
メモ
数値や日付のフィールドで特定の値ではなく、値の範囲で検索したい場合は、BETWEEN演算子を利用します。
BETWEEN演算子の使用方法については
こちらの記事を参照してください。
例1
次のテーブルを用意します。
products
id | model | name | category | price |
1 | C-XM01 | モーダンチェア | チェア | 56000 |
2 | X-XD05 | ラージデスク | テーブル | 87000 |
3 | A-DA40 | ラウンドダイニングチェア | チェア | 28000 |
4 | O-XX100 | ナチュラルオフィス | チェア | 13800 |
5 | R-D400 | ラウンドダイニングテーブル | テーブル | 128000 |
6 | R7000 | ウッドキャビネット | その他 | 32000 |
7 | B-200 | リネンベッド | ベッド | 184500 |
8 | B-250 | ホワイトダブルベッド | ベッド | 324850 |
9 | W-80 | ワーキングチェア | チェア | 45000 |
10 | EG-10X | エルゴノミクスデスク | テーブル | 88500 |
以下のSQLを実行します。
select * from products where category in ('チェア', 'その他')
解説
where category in ('チェア', 'その他')
上記のin演算子では、productsテーブルのcategory列の値が、'チェア'か'その他'の行であるものを検索します。
結果
上記のSQLを実行すると以下の結果となります。
id | model | name | category | price |
1 | C-XM01 | モーダンチェア | チェア | 56000 |
3 | A-DA40 | ラウンドダイニングチェア | チェア | 28000 |
4 | O-XX100 | ナチュラルオフィス | チェア | 13800 |
6 | R7000 | ウッドキャビネット | その他 | 32000 |
9 | W-80 | ワーキングチェア | チェア | 45000 |
補足
先のSQLは以下のSQLと同じ動作になります。
select * from ProductsB where category='チェア' or category='その他'
例2
次のテーブルを用意します。
products
id | model | name | category | price |
1 | C-XM01 | モーダンチェア | チェア | 56000 |
2 | X-XD05 | ラージデスク | テーブル | 87000 |
3 | A-DA40 | ラウンドダイニングチェア | チェア | 28000 |
4 | O-XX100 | ナチュラルオフィス | チェア | 13800 |
5 | R-D400 | ラウンドダイニングテーブル | テーブル | 128000 |
6 | R7000 | ウッドキャビネット | その他 | 32000 |
7 | B-200 | リネンベッド | ベッド | 184500 |
8 | B-250 | ホワイトダブルベッド | ベッド | 324850 |
9 | W-80 | ワーキングチェア | チェア | 45000 |
10 | EG-10X | エルゴノミクスデスク | テーブル | 88500 |
modelの値で検索します。以下のSQLを実行します。
SELECT * FROM dbo.products WHERE model IN ('A-DA40', 'R-D400', 'B-250');
解説
WHERE model IN ('A-DA40', 'R-D400', 'B-250');
上記のin演算子では、productsテーブルのmodel列の値が、'A-DA40', 'R-D400', 'B-250' のレコードを検索します。
結果
上記のSQLを実行すると以下の結果となります。
id | model | name | category | price |
3 | A-DA40 | ラウンドダイニングチェア | チェア | 28000 |
5 | R-D400 | ラウンドダイニングテーブル | テーブル | 128000 |
8 | B-250 | ホワイトダブルベッド | ベッド | 324850 |
例3
次のテーブルを用意します。
products
id | name | price | category |
1 | Penguin | 250 | Bird |
2 | Bear | 1050 | Mammal |
3 | Duck | 150 | Bird |
4 | Camel | 550 | Mammal |
5 | Owl | 185 | Bird |
6 | Whale | 880 | Mammal |
以下のSQLを実行します。priceが 150, 880, 1050 のレコードを選択します。
select * From ProductsA where price in (150,880,1050)
結果
SQLの実行結果は次の通りです。
id | name | price | category |
2 | Bear | 1050 | Mammal |
3 | Duck | 150 | Bird |
6 | Whale | 880 | Mammal |
例4
次のテーブルを用意します。
products
id | model | name | category | price |
1 | C-XM01 | モーダンチェア | チェア | 56000 |
2 | X-XD05 | ラージデスク | テーブル | 87000 |
3 | A-DA40 | ラウンドダイニングチェア | チェア | 28000 |
4 | O-XX100 | ナチュラルオフィス | チェア | 13800 |
5 | R-D400 | ラウンドダイニングテーブル | テーブル | 128000 |
6 | R7000 | ウッドキャビネット | その他 | 32000 |
7 | B-200 | リネンベッド | ベッド | 184500 |
8 | B-250 | ホワイトダブルベッド | ベッド | 324850 |
9 | W-80 | ワーキングチェア | チェア | 45000 |
10 | EG-10X | エルゴノミクスデスク | テーブル | 88500 |
target
id | category |
1 | チェア |
2 | ベッド |
上記のテーブルにおいて、以下のSQLを用います。
select * from products where category in (select category from target)
解説
下記のin演算子では、targetテーブルのcategory列に含まれる値が、productsテーブルのcategoryに含まれるものを検索します。
where category in (select category from target)
結果
上記のSQLを実行すると以下の結果となります。
id | model | name | category | price |
1 | C-XM01 | モーダンチェア | チェア | 56000 |
3 | A-DA40 | ラウンドダイニングチェア | チェア | 28000 |
4 | O-XX100 | ナチュラルオフィス | チェア | 13800 |
7 | B-200 | リネンベッド | ベッド | 184500 |
8 | B-250 | ホワイトダブルベッド | ベッド | 324850 |
9 | W-80 | ワーキングチェア | チェア | 45000 |
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。