【SQL – Oracle】USIGN句を使用した結合

【SQL – Oracle】USIGN句を使用した結合

USING句を使用した結合とは

 自然結合では結合列が自動的に判断されますが、USING句を使用した結合では、結合列を明示的に指定できます。USIGN句に続く「()」(丸括弧)内に、結合列を指定します。

▼ USING句を使用した結合の構文
 SELECT [表名.]列名 [, [表名. ]列名 …]
 FROM 表名1 JOIN 表名2 USING(列名[, 列名 …])
 [WHERE 結合条件以外の条件];

USING句は、主に以下のような場合に使用します。
・結合列を明示的に指定してSQL文をわかりやすくしたい場合
・結合する2つの表に共通して存在する列が複数ある場合に、そのいずれかを結合列として使用したい場合
・列名が同じでデータ型が異なる列を結合列として使用する場合

 以下の例では、DEPTNO列を結合列に指定して、EMPLOYEES表とDEPARTMENTS表を結合しています。実行結果は自然結合の場合と同じですが、ここでは結合列を明示的に指定しているのでその分だけSQL文がわかりやすくなっていることが確認できます。

▼ USING句を使用した結合

SQL> SELECT empno, ename, dname
 2  FROM employees JOIN departments USING(deptno);

EMPNO   ENAME    DNAME      
------ -------  ----------- 
1001    佐藤      管理        
1002    鈴木      管理        
1003    高橋      管理        
(省略)
1013    山田      財務        
1014    佐々木    財務        

14行が選択されました。

■ 共通して存在する列が複数ある場合のUSING句を使用した結合
 結合する2つの表に共通して存在する列がある場合でも、USING句を使用すれば、特定の列(または列の組み合わせ)だけを結合列に指定できます。ここが前記事の自然結合と大きく異なる点ですので、覚えましょう!
 下図ではそれぞれの表にMGR列とDEPTNO列が存在していますが、USIGN句にDEPTNO列を指定することでDEPTNO列の値を基に表を結合しています。

■ 共通して存在する列が複数ある場合のUSING句を使用した結合
 自然結合の場合と同様に、USING句を使用した結合でも結合列に表接頭辞を使用するとエラーになるので覚えてね!

▼ NATURAL JOIN句とUSING句は同時に指定できない

SQL> SELECT e.empno, e.ename, d.dname
 2  FROM employees e NATURA JOIN departments d
 3  USING (DEPTNO);
USING (DEPTNO)
*
行3でエラーが発生しました。:
ORA-00933: SQLコマンドが正しく終了されていません。

まとめ

▼ USING句を使用すると、結合列を明示的に指定できる
▼ 結合する2つの表に共通して存在する列が複数ある場合も、USING句で結合列を指定できる
▼ USING句の結合列には表接頭辞は指定できない
▼ 1つの結合に対して、NATURAL JOIN句(自然結合)とUSING句を同時に使用することはできない

コメントを残す