以下のSQL文を実行するとどうなりますか。
SELECT e.employee_id, d.department_id, d.department_name
FROM employees e JOIN departments d
USING (department_id);
以下の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 のように両方を修飾するため、混同に注意してください。