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句を同時に使用することはできない