相関サブクエリとは
WHERE句に外部クエリからの値を使用するサブクエリ。
外部クエリによって処理される各行を一行ずつ取り出して、
相関サブクエリ内の指定した位置に一行ずつ代入される。
相関サブクエリの実際の動き
相関サブクエリは、小分けしたグループ内での比較をする時などに便利。
具体例として、以下のテーブルを使用して、
各shouhin_bunrui
毎の平均単価よりも、hanbai_tanka
が高い商品のデータを抽出してみる。
使用クエリ
select
shohin_mei
, shohin_bunrui
, hanbai_tanka
from
shohin s1
where
hanbai_tanka > (
select
avg(hanbai_tanka)
from
shohin s2
where
s1.shohin_bunrui = s2.shohin_bunrui
group by
shohin_bunrui
);
抽出結果
処理の流れ
- サブクエリの中で
shohin_bunrui
毎に平均hanbai_tanka
を算出 - 外部クエリで取得したデータ(=商品毎の
hanbai_tanka
)一つ一つを、
サブクエリ内のshohin_bunrui
毎の平均hanbai_tanka
と比較していく。
(同じshohin_bunrui
のデータ同士を比較する。) -
shohin_bunrui
毎の平均値よりも、hanbai_tanka
の高い商品が抽出される。
抽出結果の具体例
shohin_idが1のTシャツについて見てみる。
-
shohin_id
が1のTシャツはshohin_bunrui
が衣服で、hanbai_tanka
が1000。 - 相関サブクエリの中では、衣服の
avg(hanbai_tanka)
は2500と算出されている。 - 相関サブクエリ内で、
shohin_bunrui
毎に1.の数値と2.の数値を比較している。 - Tシャツの
hanbai_tanka
は、衣服の平均hanbai_tanka
よりも小さいため、データが抽出されなかった。