1Z0-071 · Silver SQL
副問合せを使用した問合せの解決
★★★☆☆
Q12of 20
以下のSQL文の実行結果として正しいものはどれですか。 — Silver SQL 問12
以下のSQL文の実行結果として正しいものはどれですか。
SELECT employee_id, department_id FROM employees e
WHERE salary > (
SELECT AVG(salary) FROM employees d
WHERE d.department_id = e.department_id
);Choices選択肢
- A全従業員のリスト
- B同じ部署で最高給与の従業員リスト
- C同じ部署で平均給与以上の従業員リスト正解
- D同じ部署で平均給与以下の従業員リスト
Answer
正解は、Cです
Explanation解説
相関副問合せで 同じ部署内 の平均給与を算出し、それより高い給与を持つ従業員を抽出しています。
相関副問合せ(Correlated Subquery)の特徴:
副問合せ内から 外側のクエリの列を参照 する形態です。今回は内側の d.department_id = e.department_id で、外側の従業員 e の部署IDを参照しています。
処理イメージ:
外側のemployees e を1行ずつ処理:
e.employee_id = 1, e.department_id = 10 のとき
→ 内側: SELECT AVG(salary) FROM employees WHERE department_id = 10
→ 部署10の平均給与と e.salary を比較
e.employee_id = 2, e.department_id = 20 のとき
→ 内側: SELECT AVG(salary) FROM employees WHERE department_id = 20
→ 部署20の平均給与と e.salary を比較
... 以下、全行に対して内側のクエリが実行される通常の副問合せとの違い:
| 種類 | 副問合せの実行回数 | 用途 |
|---|---|---|
| 通常の副問合せ | 1回(最初に1回だけ) | 「全社の平均」のような単一の集計値を比較 |
| 相関副問合せ | 行ごとに実行 | 「自分の所属グループでの集計」と比較する場合 |
相関副問合せはパフォーマンスが落ちやすい構文ですが、Silver SQL では理解必須の論点です。