データの検索(副問い合わせ)
副問い合わせの結果を比較する
ANYを使用することで、副問い合わせにより取得した複数の結果と、主問い合わせ側の項目とを比較し、条件に該当したデータを抽出することが可能です。
同じように複数値と比較をするIN句との違いは、値の大小を比較できるところです。
[Oracle] データ検索 複数値検索SQL(IN)データの検索(複数値を一度に検索)
複数値を条件に指定し抽出する
複数の値から一つでも一致したデータを抽出する場合、WHERE句にO...
SELECT 列1, 列2 ・・・ FROM テーブル1
WHERE 列1 比較演算子 ANY (SELECT 列1 FROM テーブル1 WHERE 条件1);
それではサンプルを見てみましょう。
以下のようなsaleテーブルがあります。
sale_day | item_cd | count | emp_cd |
---|---|---|---|
20191104 | 001 | 10 | A00001 |
20191104 | 002 | 5 | A00003 |
20191105 | 003 | 3 | A00003 |
20191106 | 003 | 2 | A00004 |
emp_cdがA00003のデータのcount列の値より大きいcount値を持つデータを抽出するSQLです。
1 2 3 4 |
SELECT * FROM sale WHERE count > ANY (SELECT count FROM sale WHERE emp_cd = 'A00003'); |
上記を実行し、抽出された結果がこちらです。
sale_day | item_cd | count | emp_cd |
---|---|---|---|
20191104 | 001 | 10 | A00001 |
20191104 | 002 | 5 | A00003 |
emp_cdがA00003のcount値(5, 3)のいずれかより大きい値、つまり3より大きいデータが抽出されました。
なお、ANY句の否定形は「NOT 比較演算子 ANY」となりますが、NOTを使用するより、比較演算子を逆にして取得したほうが後のメンテナンス時にわかりやすいかと思います。
以上が、副問い合わせ「ANY」の使い方です。
ぜひ参考にしてみてください。