助け合いフォーラム

Oracle DB

Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26701
問題を開く
PROD表と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文の実行結果は次のようになります。


 
SQLを表示
SELECT name, category
FROM prod NATURAL JOIN category;

参考

自然結合では、2つの表に共通して存在する同名で同じデータ型(または互換性のあるデータ型)の列に基づいて、表を結合します。
構文は以下の通りです。

 SELECT [表接頭辞.]列名 [, [表接頭辞.]列名 ...]
 FROM 表名1 NATURAL JOIN 表名2
 [WHERE ...];

 
 
SQLを表示
DESC departments;

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;


同名で同じデータ型(または互換性のあるデータ型)の列が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;


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


 
SQLを表示
SELECT departments.department_id, employees.employee_name
FROM departments NATURAL JOIN employees;



 
SQLを表示
SELECT department_id, employees.employee_name
FROM departments NATURAL JOIN employees;
上に戻る

自然結合

投稿日 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件と理解することが出来ました。 ありがとうございました!

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

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