助け合いフォーラム


全従業員のうち、いずれかの部署に所属している従業員の従業員番号、従業員名、所属部署番号、所属部署名を表示するには、どの問い合わせを実行しますか(該当するものを全て選択して下さい)。
正解
SELECT e.employee_id, e.employee_name, d.department_id, d.department_name FROM departments d, employees e WHERE d.department_id = e.department_id;
SELECT employee_id, employee_name, department_id, department_name FROM departments JOIN employees USING (department_id);
解説
以上より、
・SELECT e.employee_id, e.employee_name, d.department_id, d.department_name FROM departments d, employees e WHERE d.department_id = e.department_id;
・SELECT employee_id, employee_name, department_id, department_name FROM departments JOIN employees USING (department_id);
が正解となります。
正解のSQL文の実行結果は次のようになります。

FROM departments d, employees e
WHERE d.department_id = e.department_id;

FROM departments JOIN employees
USING (department_id);
その他の選択肢については次のとおりです。
・SELECT employee_id, employee_name, department_id, department_name FROM departments NATURAL JOIN employees USING(department_id);
NATURAL JOIN句とUSING句を1つの結合で同時に指定することはできません。
・SELECT employee_id, employee_name, department_id, department_name FROM departments d JOIN employees e ON d.department_id = e.department_id;
2つの表にある同名のDEPARTMET_ID列に表接頭辞が使用されていないためエラーとなります。
・SELECT e.employee_id, e.employee_name, d.department_id, d.department_name FROM departments d NATURAL JOIN employees e ON d.department_id = e.department_id;
NATURAL JOIN句では2つの表にある同名の列が自動的に結合列として判断されるので、ON句を指定することはできません。
参考
等価結合を行うには次の方法があります。
・自然結合(NATURAL JOIN)
・USING句を使用した結合
・ON句を使用した結合
・Oracle独自の結合構文による結合
外部結合では?
問題には「全従業員の」と書かれていますが、選択肢はどれもdepartment_idが入っている従業員しか抽出できない文になっていて、なぜ2つ目と5つ目が正解になるのかがわかりません。
外部結合ではないのでしょうか?
解釈がちがったらすみません。まず単純に2と5以外は構文エラーとなってます。NATURAL JOIN にUSINGもONも使いません。もうひとつの不正解のJOIN ON にはSERECT句に表接頭辞がないのでどちらの表か識別できずエラーになります。不正解はすべて構文エラーとなります。
また外部結合をすると、NULLの場所も表示してしまいます。ただ全従業員の従業員番号、従業員名、所属部署番号、所属部署名を表示するだけならば外部結合はしなくていいと思われます。聞き方に詳しい条件がないので、難しいですが問題形式となると設問に対しても最も適してる回答を選ぶしかないので2と5が妥当になるかなと思います。
例えば全従業員の番号などを表示する際に、売り上げがない人も表示となると外部結合のある問題がでるかもです。
僕も同じく勉強している身なのであくまで個人の見解と知識なので、もっとわかりやすい説明をされている方がいればそちらを参考にしたほうが良いかもです。
コメント
この投稿に対して返信しませんか?
A Ayame_0515
2025/06/24 09:41
追加 2と5がエラーなく実行できることは理解できています!