助け合いフォーラム
Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26702
問題を開く
DEPARTMENTS表とEMPLOYEES表の構造を確認して下さい。


次のSQL文のうち、正しく実行されるものはどれですか。


次のSQL文のうち、正しく実行されるものはどれですか。
正解
SELECT department_name, employee_name FROM departments JOIN employees USING (department_id);
解説
USING句を指定した結合では、結合列に表接頭辞を使用できません。また、NATURAL JOIN句と同時に指定することもできません。
以上より、
・SELECT department_name, employee_name FROM departments JOIN employees USING (department_id);
が正解となります。
正解のSQL文の実行結果は次のようになります。

その他の選択肢については次のとおりです。
・SELECT department_name, employee_name FROM departments NATURAL JOIN employees USING (department_id);
USING句を指定した結合では、NATURAL JOIN句とUSING句を1つの結合で同時に指定することはできません。
・SELECT department_name, employee_name FROM departments d JOIN employees e USING (d.department_id);
・SELECT d.department_id, e.employee_name FROM departments d JOIN employees e USING(department_id);
USING句を指定した結合では、結合列に表接頭辞を使用できません。
以上より、
・SELECT department_name, employee_name FROM departments JOIN employees USING (department_id);
が正解となります。
正解のSQL文の実行結果は次のようになります。

その他の選択肢については次のとおりです。
・SELECT department_name, employee_name FROM departments NATURAL JOIN employees USING (department_id);
USING句を指定した結合では、NATURAL JOIN句とUSING句を1つの結合で同時に指定することはできません。
・SELECT department_name, employee_name FROM departments d JOIN employees e USING (d.department_id);
・SELECT d.department_id, e.employee_name FROM departments d JOIN employees e USING(department_id);
USING句を指定した結合では、結合列に表接頭辞を使用できません。
参考
USING句を使用した結合は、等価結合の1つで、結合列を明示的に指定できます。
USING句に指定できる列は2つの表で同名の列です。自然結合では、同名でデータ型が異なる列を結合するとエラーとなりますが、USING句を使用して結合列を制限することで、エラーを避ける事ができます。
構文は以下の通りです。
SELECT [表接頭辞.]列名 [, [表接頭辞.]列名 ...]
FROM 表名1 JOIN 表名2 USING (列名 [,列名...])
[WHERE ...];

USING句を使用した表の結合では、結合列を明示的に指定できるので、2つの表に共通して存在する列が2つ以上ある場合でも、特定の行だけを結合列として指定できます。


また、USING句を使用した表の結合では結合列に表接頭辞を使用できません。表接頭辞を指定するとエラーとなります。

なお、1つの結合でNATURAL JOIN句とUSING句を1つの結合で同時に指定できません。同時に指定するとエラーとなります。

USING句に指定できる列は2つの表で同名の列です。自然結合では、同名でデータ型が異なる列を結合するとエラーとなりますが、USING句を使用して結合列を制限することで、エラーを避ける事ができます。
構文は以下の通りです。
SELECT [表接頭辞.]列名 [, [表接頭辞.]列名 ...]
FROM 表名1 JOIN 表名2 USING (列名 [,列名...])
[WHERE ...];

SQLを表示
DESC departments;
DESC employees;
SELECT departments.department_name, employees.employee_name
FROM departments JOIN employees
USING (department_id);
DESC employees;
SELECT departments.department_name, employees.employee_name
FROM departments JOIN employees
USING (department_id);
USING句を使用した表の結合では、結合列を明示的に指定できるので、2つの表に共通して存在する列が2つ以上ある場合でも、特定の行だけを結合列として指定できます。

SQLを表示
SELECT department_id, department_name
FROM departments;
SELECT department_id, department_name
FROM departments3;
FROM departments;
SELECT department_id, department_name
FROM departments3;

SQLを表示
DESC departments3;
SELECT department_id, department_name
FROM departments
NATURAL JOIN departments3;
SELECT department_id, departments.department_name
FROM departments
JOIN departments3 USING (department_id);
SELECT department_id, department_name
FROM departments
NATURAL JOIN departments3;
SELECT department_id, departments.department_name
FROM departments
JOIN departments3 USING (department_id);
また、USING句を使用した表の結合では結合列に表接頭辞を使用できません。表接頭辞を指定するとエラーとなります。

SQLを表示
SELECT departments.department_id, employees.employee_id
FROM departments
JOIN employees USING (department_id);
FROM departments
JOIN employees USING (department_id);
なお、1つの結合でNATURAL JOIN句とUSING句を1つの結合で同時に指定できません。同時に指定するとエラーとなります。

SQLを表示
SELECT department_id, employees.employee_id
FROM departments
NATURAL JOIN employees USING (department_id);
FROM departments
NATURAL JOIN employees USING (department_id);
解説は正しいですか?
投稿日 2025/04/09
解説
- SELECT department_name, employee_name FROM departments d JOIN employees e USING (d.department_id);
- SELECT d.department_id, e.employee_name FROM departments d JOIN employees e USING(department_id);
USING句を指定した結合では、結合列に表接頭辞を使用できません。
上の解説は1の解説で、2は表接頭辞を使用することはできないが、表接頭辞を使用していないためどちらの表の列か判別できない。故に不正解という認識で良いですか?
r
rink_rew
2025/04/10 17:44
2は、USINGの結合列としてdepartment_idが指定されていて、結合列に別名がついている(SELECT d.department_id ~~~~の d.department_id の部分)という話ですかね。
日本語の問題とも言えるかもしれませんが、解説の「USING句を指定した結合では、結合列に表接頭辞を使用できません。」はどちらのケースも説明できている、と言えないこともないかなと思いました。
SQL> SELECT d.department_id, e.employee_name FROM departments d JOIN employees e USING(department_id);
SELECT d.department_id, e.employee_name FROM departments d JOIN employees e USING(department_id)
*
行1でエラーが発生しました。:
ORA-25154: USING句の列の部分には修飾子を持てません。
SQL> SELECT department_id, e.employee_name FROM departments d JOIN employees e USING(department_id);
DEPARTMENT_ID EMPLOYEE_NAME
------------- ------------------------------
1 山田二郎
2 佐藤昭夫
3 山口洋子
4 田中浩介
5 加藤昭彦
1 佐々木明子
1 菊池浩二
1 中山大輔
2 星野健一
3 斎藤京子
4 吉田亜希
DEPARTMENT_ID EMPLOYEE_NAME
------------- ------------------------------
5 阿部伊吹
1 米村真司
2 伊藤佳奈
3 橋本淳
4 井上悦子
5 渡辺和也
1 塚本孝
1 野口圭子
1 内田雄介
1 高田明
1 坂本真
22行が選択されました。
SQL>
コメント
この投稿に対して返信しませんか?
S Shibai_Oracle
2025/04/11 17:23
勉強になりました。ありがとうございます。