coeri24さんの投稿一覧
下記解説が引っかかりました。
演算子の右辺にて、
department_id(部署)ごとにMIN(salary)で給与の最小値を出しているので
複数行が返されると思うのですが、なぜ単一演算子で通るのでしょうか。
・SELECT department_id, AVG(salary) FROM employees WHERE salary > (SELECT MIN(salary) FROM employees) GROUP BY department_id;
が正解となります。
よろしくお願いいたします。
解説の下記部分が理解できないです。
・SELECT m.employee_name FROM employees m
WHERE EXISTS (SELECT * FROM employees e WHERE e.manager_id = m.employee_id);
主問合せの表にMANAGER_IDを持つ表に見立てたEMPLOYEES表 m を、副問合せの表に全従業員のEMPLOYEES表 e を逆に指定しているため、上司の名前が表示されます。
EXISTS条件を使用した相関副問い合わせですよね。
1:主問い合わせで参照している「employees m」から1行取得
2:副問い合わせの条件「e.manager_id = m.employee_id」に従って
副問い合わせ内で参照している「employees e」から、manager_idとemployee_idが等しい行を取得
3:2で行が取得できたら、主問い合わせのEXISTS条件が「真」になり、
その行の「employee_name」が返される
上記の流れであっていますでしょうか。
この途中で、マネージャーの名前と従業員の名前が逆になって表示されてしまう仕組みが
イメージできず理解ができません。
自己結合もイメージができず苦手分野ですので、
今回思い切って質問してみました。
ご回答お待ちしています。よろしくお願いいたします。