結合する2つの表に今日打つして存在する列が複数ある場合に、結合列を明示的に指定したいときは、後述の「USING句を指定した結合」または「ON句を使用した結合」を実行します。
▼自然結合の構文
SQL:1999結合構文でも、多くの場合で表接頭辞を使用して列名を修飾できますが、自然結合の結合列には表接頭辞を使用できません。結合列に表接頭辞を使用するとエラーになります。
以下の例では、結合列にあるDEPTNO列に表接頭辞「d.」を指定しているためエラーになっています。
▼ 自然結合における表接頭辞を使用した列名の修飾(1)
SQL> SELECT e.empno, e.ename, d.deptno, d.dname
2 FROM employees e NATURAL JOIN departments d;
行1でエラーが発生しまいた。:
ORA-25155: NATURAL結合で使用される列は修飾子を持てません。
結合列以外には表接頭辞を指定できるので、ここでは次の例のようにDEPTNO列の表接頭辞を削除すると正常に実行できます。
▼ 自然結合における表接頭辞を使用した列名の修飾(2)
SQL> SELECT e.empno, e.ename, deptno, d.dname ← 結合列以外には、表接頭辞を指定できる
2 FROM employees e NATURAL JOIN departments d;
行1でエラーが発生しまいた。:
ORA-25155: NATURAL結合で使用される列は修飾子を持てません。
WHERE句に結合列を指定する場合も同様です。WHERE句に指定した結合列に表接頭辞を指定するとエラーにります。
▼ 自然結合における表接頭辞を使用した列名の修飾(3)
SQL> SELECT e.empno, e.ename, d.dname
2 FROM employees e NATURAL JOIN departments d;
3 WHERE e.deptno IN (10, 20);
*
行3でエラーが発生しまいた。:
ORA-25155: NATURAL結合で使用される列は修飾子を持てません。
SQL> SELECT e.empno, e.ename, d.dname
2 FROM employees e NATURAL JOIN departments d;
3 WHERE deptno IN (10, 20);
EMPNO ENAME DNAME
----- ---------- --------
1001 佐藤 管理
1002 鈴木 研究開発
1005 渡辺 研究開発
1008 中村 管理
1009 小林 研究開発
1011 加藤 研究開発
1013 山田 研究開発
1014 佐々木 管理