てぃぐれのプログラマwiki

ワクワクに従う

内部結合の非等価結合とクロス結合【ORACLE】

非等価結合とは

SQLにおいてテーブルをjoinする際の結合条件が等価ではないことである。

on句でbetweenや不等号が使われる。

 

勘違いしやすいところ

これは非等価式

SELECT e.employee_id,h.employee_id, e.first_name, e.last_name, e.hire_date,h.start_date , h.end_date
FROM hr.employees e
inner join hr.job_history h
on e.hire_date BETWEEN h.start_date AND h.end_date
;

 

これは等価式

SELECT e.employee_id,h.employee_id, e.first_name, e.last_name, e.hire_date,h.start_date,h.end_date
FROM hr.employees e
inner join hr.job_history h
on e.employee_id = h.employee_id
order by 1;

 

on句で等号なのかそれ以外かが重要である。

 

挙動 

クロス結合をon句でフィルターしている動きになる。

つまり、on句での条件が全く絞り込めていない場合、結果はクロス結合時と同じになってしまう。逆に言えば、on句の条件とクロス結合時のwhere句の条件が一緒である場合、同じ結果が持たされるであろう。

 

しかし、where句以降でフィルターするクロス結合とon句で結合時にフィルターするので、クロス結合の方が処理が遅くなる可能性は高い。

 

感想

仕事で使用したことがないので戸惑った。

あまり仕事では使いたくない構文である。