助け合いフォーラム
Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26508
問題を開く
DEPARTMENTS表とEMPLOYEES表の構造を確認して下さい。
2つの表を結合するSQL文としてエラーとなるものはどれですか(該当するものを全て選択して下さい)。
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ではいろいろな方法で表を結合することができます。主な結合方法は次の通りです。
・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を利用の場合は、結合列に表接頭辞が使えないはず。
問題がおかしいのではないか
C
CafeLate
2023/03/27 17:05
エラーとなるSQL文を選ぶ問題ですが、それは大丈夫ですか?
実際にLiveSQLで実行すると正解の選択肢はエラーとなり、それ以外は正常に結果が帰ってきます。
コメント
この投稿に対して返信しませんか?
r reo_tanabe
2023/06/26 11:20
今回の結合条件はdepartment_idですが、department_idに関して表接頭辞が使われていない(Select文で選ばれていない)ので、エラーにはならないのではないでしょうか。