助け合いフォーラム

Oracle DB

Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26499
問題を開く
ON句の説明として誤っているものはどれですか。

正解

同じ名前の列のみを結合することができる

解説

ON句を使用した結合では、自然結合やUSING句での結合とは異なり、列名が違っていても結合列として指定することができます。

以上より、
・同じ名前の列のみを結合することができる
が正解となります。

参考

ON句を使用した結合では、結合条件をON句に指定します。
自然結合やUSING句での結合とは異なり、列名が違っていても結合列として指定できます。
構文は以下の通りです。

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

 
 
SQLを表示
SELECT department_name, employee_name
FROM departments JOIN employees
 ON departments.department_id = employees.department_id;


ON句を使用した結合では、結合する2つの表にある同じ名前の列をSELECT句やWHERE句に指定する場合は、必ず表接頭辞を使用して列を指定しなければなりません。


 
SQLを表示
SELECT department_id, department_name, employee_name
FROM departments JOIN employees
 ON departments.department_id = employees.department_id;


また、ON句は、「列名 = 列名」のような等価結合の結合条件を指定する場合のほか、「<,>,<=,>=,BETWEEN」などの演算子を使用して非等価結合の結合条件を指定する場合にも使用します。


 
SQLを表示
SELECT employee_name, salary, grade
FROM employees JOIN grade
 ON employees.salary BETWEEN grade.low AND grade.high;


[取り出す行を指定した表の結合]
表の結合時、結合した表から取り出したい行を指定してSQL文を実行できます。
行を指定する場合は、取り出す行の条件をWHERE句に指定します。

 SELECT 表別名.列名 [,表別名.列名 ...]
 FROM 表名1 表別名1 JOIN 表名1 表別名2
  ON 表別名1.列名 = 表別名2.列名
 WHERE 取り出す行の条件
  AND 取り出す行の条件
  AND ...;

 
 
SQLを表示
SELECT e.employee_id, d.department_name, e.employee_name
FROM departments d JOIN employees e
 ON d.department_id = e.department_id
WHERE e.hiredate >= '2005-10-01';


取り出す行の条件が複数ある場合は、WHERE句に1つ目の条件を記述し、その後に論理演算子ANDを使用して2つ目以降の条件を記述します。
WHERE句はON句による結合の他、NATIRAL JOIN、USING句による結合の場合も使用できます。


 
SQLを表示
SELECT e.employee_id, d.department_name, e.employee_name
FROM departments d JOIN employees e
 USING (department_id)
WHERE e.hiredate >= '2005-10-01';



 
SQLを表示
SELECT e.employee_id, d.department_name, e.employee_name
FROM departments d NATURAL JOIN employees e
WHERE e.hiredate >= '2005-10-01';


なお、ON句による結合の場合のみ、WHERE句は記述せず、ON句に記述した結合条件に論理演算子ANDで続けて取り出す行の条件を指定することもできます。

 SELECT 表別名.列名 [,表別名.列名 ...]
 FROM 表名1 表別名1 JOIN 表名1 表別名2
  ON 表別名1.列名 = 表別名2.列名
  AND 取り出す行の条件
  AND ...;

 
 
SQLを表示
SELECT e.employee_id, d.department_name, e.employee_name
FROM departments d JOIN employees e
 ON d.department_id = e.department_id
AND e.hiredate >= '2005-10-01';
上に戻る

ON句には結合条件のみを記述する

投稿日 2025/08/07

「ON句には結合条件のみを記述する」が正となってますが、ON句には検索条件も指定できる認識なのですが、間違いではないのでしょういか?

2025/08/18 20:05

確かにON句においてフィルタリングの条件的なものを書くことは可能ですが、それも結局は「結合条件」ではと思います。ON句に指定する条件は結合処理時における結合条件、WHERE句は結合結果に対する絞り込み条件を指定するというのが基本ですし。
黒本を書籍を見ても、ON句には結合の条件を指定する例しか記載はなく、Oracle Master SilverSQLとしてはこの理解で良いように思います。


コメント

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

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