Re: 問題ID:20000

この質問の投稿一覧へ

なし Re: 問題ID:20000

msg# 1.1
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2018-10-11 22:19
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
以下の問題、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は
SELECT employee_name FROM employees
WHERE manager_id IN (SELECT employee_id FROM employees);
ですが、順に考えると
・サブクエリでemployeesテーブルからemployee_idのリスト(全従業員のid)を取得
・employeesテーブルのmanager_idに、取得したemployee_idのどれか(INで指定していますので、すべての従業員IDのどれでもマッチする)が含まれている行(=設問の「上司のいる従業員」)を取得
・取得した行のemployee列を表示
となりますので、設問の要件を満たすといえます。

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

投稿ツリー

  >フォーラム検索へ


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