データベース
各部門の平均給与より高い給与の従業員を取得するSQL文はどれか。(テーブル名: employees, 列名: emp_id, dept_id, salary)
ア.SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees)
イ.SELECT * FROM employees e1 WHERE salary > (SELECT AVG(salary) FROM employees e2 WHERE e2.dept_id = e1.dept_id)正解
ウ.SELECT * FROM employees GROUP BY dept_id HAVING salary > AVG(salary)
エ.SELECT * FROM employees WHERE dept_id IN (SELECT dept_id FROM employees WHERE salary > AVG(salary))
解説
相関副問い合わせは「クラスの平均点と比較する」ような仕組み。外側の各行ごとに内側のSELECTが再計算される。
なぜ イ が正解か
イは相関副問い合わせ。e1の各従業員に対して、同じ部門(e2.dept_id = e1.dept_id)の平均給与を計算し、それより高い給与の従業員を返す。部門ごとの平均との比較になる正しい形。
出典: AI生成問題(学習用)