Google Prettify

2009-03-16

Oracle Join 分類

在Oracle的文件中將join分為下列幾類:
  1. Equijoins:
  2. 就是指一般的select from T1, T2 where T1.C1=T2.C2...。
  3. Self Joins
  4. 自己join自己。
  5. Cartesian Products
  6. 傳說中的卡迪生乘積。就是from T1, T2而不加其他限定條件。這種join方式會有MxN筆數出來,實務上一般也不會用這種。為什麼ANSI sql會有這種用到現在還是個謎...。
  7. Inner Joins
  8. 效果與equijoin相同。
  9. Outer Joins
  10. 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(+)...

2 則留言 :

匿名 提到...

DB:oracle 8i
TOOLS:TOAD
指令如下:
SELECT *
FROM INVO_TEMP2
INNERJOIN INVO_TEMP3
ON INVO_TEMP2.vip_no = INVO_TEMP3.vip_no

出現ORA-00933 SQL命令的結束有問題
請問是那裡出錯?
Steven

施佑達 提到...

這個一般都是SQL 指令下錯。就您所貼的SQL,至少IINNERJOIN應該是分開的。你可以再確定一下喔!

您或許對這些有興趣

Related Posts with Thumbnails

最後

謝謝您的閱讀,希望您可以有豐富的收獲。