在Oracle的文件中將join分為下列幾類:
- Equijoins:
就是指一般的select from T1, T2 where T1.C1=T2.C2...。
- Self Joins
自己join自己。
- Cartesian Products
傳說中的卡迪生乘積。就是from T1, T2而不加其他限定條件。這種join方式會有MxN筆數出來,實務上一般也不會用這種。為什麼ANSI sql會有這種用到現在還是個謎...。
- Inner Joins
效果與equijoin相同。
- Outer Joins
Outer join分為LEFT [OUTER] JOIN, RIGHT [OUTER] JOIN 2種。 即使某一邊的值為null仍會帶出另一邊的記錄。
Outer Join是很常用的join方式,但是foreign key會對應不到primary key這原本就是不太合理的事...。這就好像說課程表對應不到授課老師一樣;通常是在開發時期,授課老師的基本資料尚未備齊。Oracle建議使用在where 條件中使用(+)運算子來代替outer join 語法。當使用left join時,(+)是加在等號右邊,例如
from T1 left join T2 on T1.C1=T2.C1 lfet join T3 on (T1.C2=T3.C2 and T1.C3=T3.C3)...
等價於
from T1,T2,T3 where T1.C1=T2.C1(+) and T1.C2=T3.C2(+) and T1.C3=T3.C3(+)...