レス
元トピ次レス
タイトル
Re: 問題ID:20000
フォーラム
最強WEB問題集Oracle Master 12c Bronze SQL基礎
投稿ユーザ(投稿日)
(2018/10/11)
本文

-----引用(始)-----

以下の問題、1番が正解なのは理解できるのですが、なぜ4番も正解なのか分かりません。
どなたかご教示お願いします。

-----引用(終)-----

これはテーブルの構成がわかってないとイメージしにくそうですね。問題集のトップページにテーブル作成するSQLがあるのでそこも合わせて確認してください。

イメージするために別のところから先に行きますが
・jobsテーブルの中身を見ると、job_idが1001,1002というのは役職が上(取締役、管理職)の人であることがわかります。
・employeesテーブルの中身を見ると、job_idが1001,1002ではない人はmanager_idがNULLではない事がわかります。ここから、manager_idは「上司」を意味すると読み取れます。
・job_idとemployee_idの最小値が同じ1001から始まるので混乱しそうですが、manager_idはdepartmentsテーブルとemployeesテーブルの両方にあるので、ここはemployee_idが入るのではないかと考えられます(employeesテーブルのレコードからすると、job_idが1002(管理職)の人のemployee_idが入っていることから推測)

各テーブルの関係が見えたので、ご質問の内容に移ります。疑問を持たれたSQLは
[code]
SELECT employee_name FROM employees
WHERE manager_id IN (SELECT employee_id FROM employees);
[/code]
ですが、順に考えると
・サブクエリでemployeesテーブルからemployee_idのリスト(全従業員のid)を取得
・employeesテーブルのmanager_idに、取得したemployee_idのどれか(INで指定していますので、すべての従業員IDのどれでもマッチする)が含まれている行(=設問の「上司のいる従業員」)を取得
・取得した行のemployee列を表示
となりますので、設問の要件を満たすといえます。

こんな感じでどうでしょうか? :-)

レス一覧

元トピ次レス


Ping-tモバイルTOP

Copyright (c) 2010
Ping-t All rights reserved.