問題ID:20000
takuto0622
投稿数: 3
以下の問題、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);
が正解となります。
どなたかご教示お願いします。
-----------------------------------------------
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);
が正解となります。
投稿ツリー
-
問題ID:20000
(takuto0622, 2018-10-11 19:02)
- Re: 問題ID:20000 (arashi1977, 2018-10-11 22:19)
-
Re: 問題ID:20000
(takuto0622, 2018-10-12 13:00)
- Re: 問題ID:20000 (arashi1977, 2018-10-12 13:06)
-
Re: 問題ID:20000
(takuto0622, 2018-10-12 21:16)
- Re: 問題ID:20000 (arashi1977, 2018-10-13 11:05)