検索

[Oracle] データ検索 副問い合わせSQL(ALL)

データの検索(副問い合わせ)

副問い合わせの結果を比較する

ALLを使用することで、副問い合わせにより取得した複数の結果と、主問い合わせ側の項目とを比較し、条件に該当したデータを抽出することが可能です。
ANY句では、例えば「列 > ANY」とした場合に、副問い合わせで取得した”いずれかより大きい値”を抽出しますが、ALLは”どの値よりも大きい値“となる点に注意が必要です。

SELECT 列1, 列2 ・・・ FROM テーブル1
WHERE 列1 比較演算子 ALL (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です。

上記を実行し、抽出された結果がこちらです。

sale_day item_cd count emp_cd
20191104 001 10 A00001

emp_cdがA00003のcount値(5, 3)のどの値よりも大きい値、つまり5より大きいデータが抽出されました。
 
なお、ALL句の否定形は「NOT 比較演算子 ALL」となりますが、NOTを使用するより、比較演算子を逆にして取得したほうが後のメンテナンス時にわかりやすいかと思います。
 
 
以上が、副問い合わせ「ALL」の使い方です。
ぜひ参考にしてみてください。