助け合いフォーラム

Oracle DB

Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26508
問題を開く
DEPARTMENTS表とEMPLOYEES表の構造を確認して下さい。





2つの表を結合するSQL文としてエラーとなるものはどれですか(該当するものを全て選択して下さい)。

正解

SELECT department_name, employee_name, salary FROM departments d JOIN employees e WHERE d.department_id = e.department_id;

SELECT d.department_name, e.employee_name, e.salary FROM departments d NATURAL JOIN employees e USING (department_id);

解説

選択肢のSQL文を1つずつ確認してみましょう。

・SELECT department_name, employee_name, salary FROM departments d JOIN employees e WHERE d.department_id = e.department_id;
JOIN句で結合する場合、結合条件はON句、またはUSING句に記述します。このSQL文のように等号(=)を使用するならばON句が必要ですが、WHERE句に結合条件が指定されておりエラーとなります。

・SELECT department_name, employee_name, salary FROM departments d LEFT OUTER JOIN employees e ON d.department_id = e.department_id;
LEFT OUTER JOINによる左側外部結合です。結合条件にJOIN句の左側に指定された表のデータは、結合条件に合致しない場合でも表示します。正しいSQL文です。

・SELECT d.department_name, e.employee_name, e.salary FROM departments d NATURAL JOIN employees e;
NATURAL JOINによる自然結合です。2つの表で共通の列である、DEPARTMENT_ID列とMANAGER_ID列の値に基いて結合します。正しいSQL文です。

・SELECT d.department_name, e.employee_name, e.salary FROM departments d NATURAL JOIN employees e USING (department_id);
NATURAL JOINとUSINGは1つの結合で同時に指定できないため、エラーとなります。

・SELECT d.department_name, e.employee_name, e.salary FROM departments d JOIN employees e USING (department_id);
USING句による等価結合です。2つの表のDEPARTMENT_ID列の値が等しい行を結合します。正しいSQL文です。

以上より、
・SELECT department_name, employee_name, salary FROM departments d JOIN employees e WHERE d.department_id = e.department_id;
・SELECT d.department_name, e.employee_name, e.salary FROM departments d NATURAL JOIN employees e USING (department_id);
が正解となります。

正解のSQL文の実行結果は次のようになります。





参考:
Oracle Databaseではいろいろな方法で表を結合することができます。主な結合方法は次の通りです。

上に戻る

表接頭辞

公開日 2023/03/27

自然結合とusingを利用の場合は、結合列に表接頭辞が使えないはず。
問題がおかしいのではないか

2023/03/27 17:05

エラーとなるSQL文を選ぶ問題ですが、それは大丈夫ですか?
実際にLiveSQLで実行すると正解の選択肢はエラーとなり、それ以外は正常に結果が帰ってきます。


コメント

r reo_tanabe

2023/06/26 11:20

今回の結合条件はdepartment_idですが、department_idに関して表接頭辞が使われていない(Select文で選ばれていない)ので、エラーにはならないのではないでしょうか。

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?