自然結合にqualifier (修飾子)は使えないのか?

 

SQL Develper のhrスキーマを使用してテスト。

 

select e.employee_id, e.first_name, e.last_name, department_id
from employees e NATURAL JOIN departments d
where department_id = 90
order by e.employee_id;  

 

アウトプット成功:

101    Neena    Kochhar    90
102    Lex    De Haan    90

 

でも、

select e.employee_id, e.first_name, e.last_name, d.department_id
from employees e NATURAL JOIN departments d
where department_id = 90
order by e.employee_id;

 

エラーになる。

ORA-25155: NATURAL結合で使用される列は修飾子を持てません。
25155. 00000 -  "column used in NATURAL join cannot have qualifier"
*Cause:    Columns that are used for a named-join (either a NATURAL join
           or a join with a USING clause) cannot have an explicit qualifier.
*Action:   Remove the qualifier.

 

結果論:

department_idは両方のテーブルに入っているため、修飾子(表接頭辞)は使用できない。

 

結合列には表接頭辞を使用しない。」というルールがある。どういうことか?

結合列というのは、データベースが列を結合するのに使用する列のことで、この例の場合は、両方の表に入っているdepartment_idである。この結合列に表接頭辞(修飾子)は入れるとエラーになる。

 

その他知っておくべき事項)修飾子(表接頭辞)は全部取ってもOK。だが、 結合列以外の列であれば、表接頭辞がある方がパフォーマンスが良くなる。

 

select employee_id, first_name, last_name, department_id
from employees e NATURAL JOIN departments d
where department_id = 90
order by e.employee_id; 

 

もエラーなし。

 

その他知っておくべき事項)表のエイリアス(別名)をいれないでも、特にエラーなし。

 

select employee_id, first_name, last_name, department_id
from employees  NATURAL JOIN departments
where department_id = 90
order by employee_id;

 

その他注意点)結合列として使われる条件:

1.2つの表に存在する同じ名前でないといけない

2.同じデータ型でないといけない。numberなど (データタイプはdescribe departments; で確認できる )

仮に、同じ名前だが、データタイプが異なる場合は、自然結合するとエラーになる。

3. 1と2を満たす結合列が2つ以上ある場合、結合列を指定することはできないため、共通するすべての列の組み合わせが同じである行のみ結合される、点も注意が必要。

 

以上