Oracle試験道場

1Z0-071 · Silver SQL

副問合せを使用した問合せの解決

★★★☆☆
Q12of 20

以下のSQL文の実行結果として正しいものはどれですか。Silver SQL12

以下の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 では理解必須の論点です。