データの検索(副問い合わせ)
副問い合わせの結果を比較する
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です。
1 2 3 4 |
SELECT * FROM sale WHERE count > ALL (SELECT count FROM sale WHERE emp_cd = 'A00003'); |
上記を実行し、抽出された結果がこちらです。
sale_day | item_cd | count | emp_cd |
---|---|---|---|
20191104 | 001 | 10 | A00001 |
emp_cdがA00003のcount値(5, 3)のどの値よりも大きい値、つまり5より大きいデータが抽出されました。
なお、ALL句の否定形は「NOT 比較演算子 ALL」となりますが、NOTを使用するより、比較演算子を逆にして取得したほうが後のメンテナンス時にわかりやすいかと思います。
以上が、副問い合わせ「ALL」の使い方です。
ぜひ参考にしてみてください。