助け合いフォーラム
トピック一覧に戻る
トピック タイトル
問題ID:20000
フォーラム
最強WEB問題集Oracle Master 12c Bronze SQL基礎
投稿ユーザ(投稿日)
(2018/10/11)
本文
以下の問題、1番が正解なのは理解できるのですが、なぜ4番も正解なのか分かりません。
どなたかご教示お願いします。

-----------------------------------------------

EMPLOYEES表から、上司のいる従業員の名前を表示します。
どの問合せを使用しますか(2つ選択して下さい)。

1.
○ SELECT e.employee_name FROM employees e
WHERE EXISTS (SELECT * FROM employees m WHERE e.manager_id = m.employee_id);

2.
SELECT m.employee_name FROM employees m
WHERE EXISTS (SELECT * FROM employees e WHERE e.manager_id = m.employee_id);

3.
SELECT e.employee_name FROM employees e
WHERE EXISTS SELECT * FROM employees m WHERE e.manager_id = m.employee_id;

4.
○ SELECT employee_name FROM employees
WHERE manager_id IN (SELECT employee_id FROM employees);

解説:
EXISTS演算子は、副問合せの結果が1行以上返される場合にTRUEとして評価される演算子です。
主問合せのWHERE句に列名と比較演算子を指定する代りに、EXISTS演算子を指定します。

WHERE EXISTS (副問合せ)

EXISTS演算子で設問の結果を得るには、主問合せで取り出したEMPLOYEES表 e の各行に対して副問合せを実行し、EMPLOYEES表 m のEMPLOYEE_ID列にMANAGER_ID列と同じ値があればTRUEを返し、上司がいる従業員として主問合せの行を表示します。
このSQL文はIN演算子を使用したSQL文にも置き換えられます。

以上より、
・SELECT e.employee_name FROM employees e
WHERE EXISTS (SELECT * FROM employees m WHERE e.manager_id = m.employee_id);
・SELECT employee_name FROM employees
WHERE manager_id IN (SELECT employee_id FROM employees);
が正解となります。
レス一覧

トピック一覧に戻る
フォーラムTopへ

Ping-tモバイルTOP

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