Oracle試験道場

1Z0-071 · Silver SQL

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

★★★★
Q13of 20

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

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

SELECT employee_id, salary, department_id FROM employees e
 WHERE department_id IN (
  SELECT department_id FROM departments WHERE location_name = 'TOKYO'
 )
 AND salary = (
  SELECT MAX(salary) FROM employees es 
   WHERE es.department_id = e.department_id
 );

Choices選択肢

  • A全従業員リスト
  • B東京部署の従業員リスト
  • C東京の各部署で最も給与が高い従業員リスト正解
  • D東京の各部署か最も給与が高い従業員リスト
Answer

正解は、Cです

Explanation解説

2つの条件を AND で組み合わせた SQL です。順に見ていきます。

条件1:東京にある部署か?

department_id IN (
  SELECT department_id FROM departments WHERE location_name = 'TOKYO'
)

これは 複数行副問合せ(IN を使用)で、TOKYO にある部署IDの一覧を取得し、従業員の department_id がその中にあるかを判定します。

条件2:自部署で最高給与か?

salary = (
  SELECT MAX(salary) FROM employees es 
   WHERE es.department_id = e.department_id
)

こちらは 相関副問合せ で、外側の従業員 e と同じ部署内の最高給与を取得し、その値と e.salary が一致するかを判定します。

2つの条件をAND結合:

  • 条件1で「東京勤務の部署」に絞り
  • 条件2で「自部署で最高給与の人」に絞る

結果として 「東京の各部署で最も給与が高い従業員」 が抽出されます。

ポイント:

  • 複数行副問合せ(IN)と相関副問合せ(=)が同じクエリ内に共存する典型パターン
  • 条件1だけだと「東京の全従業員」、条件2だけだと「各部署の最高給与の従業員」になる
  • AND で組み合わせることで両方の条件を満たす行に絞られる