1Z0-071 · Silver SQL
副問合せを使用した問合せの解決
★★★★☆
Q13of 20
以下のSQL文の実行結果として正しいものはどれですか。 — Silver SQL 問13
以下の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 で組み合わせることで両方の条件を満たす行に絞られる