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