複数の表からのデータの表示21 / 50 問

以下の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のように両方を修飾するため、混同に注意してください。

前後の問題