複数の表からのデータの表示14

以下のSQL文を実行するとどうなりますか。

SELECT e.employee_id, d.department_id, d.department_name
FROM employees e JOIN departments d
  USING (department_id);

A正常に実行され、結合した結果が返る
B構文エラーになる
Cdepartment_id が重複して2列表示される
D結合条件がないためすべての組み合わせ(直積)が返る
解説正答:B

USING 句で結合に使った列は、クエリ内のどこでも 表名・別名で修飾してはいけません。今回は d.department_id と修飾しているためエラーになります(ORA-25154: USING句の列の部分には修飾子を指定できません)。

ルール: USING (列名)NATURAL JOINで結合した共通列は、SELECT句・WHERE句などで 修飾子なしの裸の列名 で参照する必要があります。

正しい書き方:

SELECT e.employee_id, department_id, d.department_name
FROM employees e JOIN departments d
  USING (department_id);

department_id から d. を外せば正常に動作します。

結合方式と結合列の修飾:

結合方式結合列の修飾
NATURAL JOIN不可
JOIN ... USING(列)不可
JOIN ... ON(条件)必須(両表を修飾して比較)

ON 句で結合する場合は逆に e.department_id = d.department_id のように両方を修飾するため、混同に注意してください。