サブクエリの中でも「相関副問い合わせ」が一番ややこしいので、頭の中を整理する。
まずは、何を出したいのか。
1. サラリーが一番高い人の名前とsalaryを出したい。ー> 普通のサブクエリ でできる。
select first_name || ' ' || last_name fullname, salary from employees
where salary = (select max(salary) from employees)
;
2. 部署ごとの、サラリーが一番高い人の名前とsalaryを出したい。 ー> 相関サブクエリ。
select department_id, first_name || ' ' || last_name fullname, salary
from employees eout
where salary =
(select max(salary) from employees
where department_id = eout.department_id)
;
となる。
まずは、OUTPUTが出るまでにどのような過程が行われるのか、を知っておく。
1.メインである
select department_id, first_name || ' ' || last_name fullname, salary
from employee eout
が最初に実行される。
2. 1で実行されたOUTPUTが、内部クエリのmax(salary)と比較され、同じ部署に存在する従業員リストの中でMAXが出される。
ここで大切なこと:
1.department_idを外側(メイン)のクエリと内側のクエリをWHEREで統合してあげる点。
2.表名エイリアスはメインの表は指定する必要あり。
3.相関副問い合わせは、メイン(外側)から実行されるので、考えるときも外側から構成する。
これだけだが、違う表を使ったり、もっと複雑な相関副問い合わせは、もっと混乱する。
以上