助け合いフォーラム
Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26701
問題を開く
PROD表とCATEGORY表の構造とデータを確認して下さい。
次のSQL文の文を実行すると、何件のデータが表示されますか。
SELECT name, category
FROM prod NATURAL JOIN category;
次のSQL文の文を実行すると、何件のデータが表示されますか。
SELECT name, category
FROM prod NATURAL JOIN category;
正解
0
解説
設問のSQL文ではPROD表とCATEGORY表を自然結合で結合しています。自然結合で結合する場合は、2つの表に共通して存在する同名で同じデータ型の列に基づいて、表を結合します。
PROD表とCATEGORY表では、CATEGORY列とNAME列が同名で同じデータ型の列になりますので、これらの列の値の組合せが一致する行が結合されます。
PROD表とCATEGORY表のデータを見ると、CATEGORY列とNAME列の値の組合せが一致する行は1つもないので、結合結果は1件も表示されません。
以上より、
・0
が正解となります。
設問のSQL文の実行結果は次のようになります。
PROD表とCATEGORY表では、CATEGORY列とNAME列が同名で同じデータ型の列になりますので、これらの列の値の組合せが一致する行が結合されます。
PROD表とCATEGORY表のデータを見ると、CATEGORY列とNAME列の値の組合せが一致する行は1つもないので、結合結果は1件も表示されません。
以上より、
・0
が正解となります。
設問のSQL文の実行結果は次のようになります。
SQLを表示
SELECT name, category
FROM prod NATURAL JOIN category;
FROM prod NATURAL JOIN category;
参考
自然結合では、2つの表に共通して存在する同名で同じデータ型(または互換性のあるデータ型)の列に基づいて、表を結合します。
構文は以下の通りです。
SELECT [表接頭辞.]列名 [, [表接頭辞.]列名 ...]
FROM 表名1 NATURAL JOIN 表名2
[WHERE ...];
自然結合では、結合する列が自動的に判断されるため、明示的に結合条件を指定する必要がありません、また、2つの表に同名で異なるデータ型の列がある場合、自然結合を行うとエラーとなります。
同名で同じデータ型(または互換性のあるデータ型)の列が2つ以上ある場合には、全ての共通する列が結合条件として使用されます。いずれか1つの列を結合列として指定することはできません。
また、自然結合の結合列には表接頭辞を使用することができません。表接頭辞を指定するとエラーとなります。
構文は以下の通りです。
SELECT [表接頭辞.]列名 [, [表接頭辞.]列名 ...]
FROM 表名1 NATURAL JOIN 表名2
[WHERE ...];
SQLを表示
DESC departments;
DESC employees;
SELECT departments.department_name, employees.employee_name
FROM departments NATURAL JOIN employees;
DESC employees;
SELECT departments.department_name, employees.employee_name
FROM departments NATURAL JOIN employees;
自然結合では、結合する列が自動的に判断されるため、明示的に結合条件を指定する必要がありません、また、2つの表に同名で異なるデータ型の列がある場合、自然結合を行うとエラーとなります。
SQLを表示
DESC departments2;
SELECT department_name
FROM departments NATURAL JOIN departments2;
SELECT department_name
FROM departments NATURAL JOIN departments2;
同名で同じデータ型(または互換性のあるデータ型)の列が2つ以上ある場合には、全ての共通する列が結合条件として使用されます。いずれか1つの列を結合列として指定することはできません。
SQLを表示
DESC departments3;
DESC employees;
SELECT department_id, employee_id
FROM departments3;
SELECT department_id, employee_id
FROM employees;
SELECT department_id, department_name, employee_id, employee_name
FROM departments3 NATURAL JOIN employees;
DESC employees;
SELECT department_id, employee_id
FROM departments3;
SELECT department_id, employee_id
FROM employees;
SELECT department_id, department_name, employee_id, employee_name
FROM departments3 NATURAL JOIN employees;
また、自然結合の結合列には表接頭辞を使用することができません。表接頭辞を指定するとエラーとなります。
SQLを表示
SELECT departments.department_id, employees.employee_name
FROM departments NATURAL JOIN employees;
FROM departments NATURAL JOIN employees;
SQLを表示
SELECT department_id, employees.employee_name
FROM departments NATURAL JOIN employees;
FROM departments NATURAL JOIN employees;
自然結合
d
daaaaa
投稿日 2023/12/05
ここはなぜ0件になるのでしょうか。
項目名、データ型が一致しているので、5件表示されませんか?
2023/12/06 08:01
解説のこの文ですかね。
PROD表とCATEGORY表では、CATEGORY列とNAME列が同名で同じデータ型の列になりますので、これらの列の値の組合せが一致する行が結合されます。
項目名、データ型が一致していても「値」が一致するものがないので1件も表示されないと言うことです。
コメント
この投稿に対して返信しませんか?
d daaaaa
2023/12/06 18:00
ご回答いただきありがとうございます。 CATEGORY列とNAME列の組み合わせで一致するものが2つの表にないので、0件と理解することが出来ました。 ありがとうございました!