1. 程式人生 > >oracle join 多表連線----至少3張表

oracle join 多表連線----至少3張表

oracle join 用法

條件連線(join)

T1{[INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 ON boolean_experssion

{[INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T3 ON boolean_experssion

.....

T1{[INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 USING ( join colunn list )

T1 NATURAL { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2


INNER 和 OUTER 對所有連線(join) 型別都是可選的.INNER 是預設; LEFT,RIGHT,和 FULL 隱含外連線.

連線條件在ON或USING子句裡宣告, 或者用關鍵字NATURAL隱含地宣告.連線條件判斷來自兩個源表 中的那些行是"匹配"的

ON子句是最常見的連線條件的型別∶它接收一個和WHERE子句裡用的一樣的 布林值表示式.如果兩個分別來自T1和T2的行在ON表示式上運算的 結果為真,那麼它們就算是匹配的行.

USING是縮寫的概念∶它接收一個用逗號分隔的欄位名字列表, 這些欄位必須是連線表共有的,最終形成一個連線條件,表示 這些欄位對必須相同.最後,JOIN USING 的輸出會為每一對相等 的輸入欄位輸出一個欄位,後面跟著來自各個表的所有其它欄位. 因此,USING (a, b, c) 等效於 ON (t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c) 只不過是如果使用了ON,那麼在結果裡 a,b,和 c欄位每個都會有兩個, 而用USING的時候每個欄位就只會有一個.

最後,NATURAL 是USING 的縮寫形式∶它形成一個 USING 列表, 該列表由那些在兩個表裡都出現了的欄位名字組成.和USINqG一樣, 這些欄位只在輸出表裡出現一次.

條件JOIN的可能型別是∶


INNER JOIN
對於 T1 的每一行 R1,生成的連線表都有一行對應 T2 中的 每一個滿足和 R1 的連線條件的行.

LEFT OUTER JOIN
首先,執行一次內連線.然後,為 T1 裡那些和 T2 裡任何一行都不滿足連線條件的行返回一個連線行, 同時該連線行裡對應 T2 的列用空值補齊.因此, 生成的連線表裡無條件地包含來自 T1 裡的每一行至少 一個副本.

RIGHT OUTER JOIN
首先,執行一次內連線.然後,為 T2 裡那些和 T1 裡任何一行都不滿足連線條件的行返回一個連線行, 同時該連線行裡對應 T1 的列用空值補齊.因此, 生成的連線表裡無條件地包含來自 T2 裡的每一行.

FULL OUTER JOIN
首先,執行一次內連線.然後,為 T1 裡那些和 T2 裡任何一行都不滿足連線條件的行返回一個連線行, 同時該連線行裡對應 T2 的列用空值補齊. 同樣,為 T2 裡那些和 T1 裡的任何行都不滿足連線條件的 行返回一個連線行,該行裡對應 T1 的列用空值補齊.

如果 T1 和 T2 有一個或者都是可以連線(join)的表, 那麼所有型別的連線都可以串在一起或巢狀在一起. 你可以在JOIN子句周圍使用圓括弧來控制連線順序, 如果沒有圓括弧,那麼JOIN子句是從左向右巢狀的.