Oracle --外鏈接

數據庫表的鏈接有:數據庫

1.內鏈接(天然鏈接):只有兩個表相匹配的行才能在結果集中顯示出來express

2.外鏈接,包括三種:spa

2-1 左外鏈接(左表是基表,右表是匹配表,左表所有顯示,右表只顯示匹配的記錄)orm

2-2 右外鏈接(右表是基表,左表是匹配表,右表所有顯示,左表只顯示匹配的記錄)it

2-3 全外鏈接(左右兩表全部的記錄都顯示出來)io

3.自鏈接(鏈接發生在一張基表內)table

inner join 表示內鏈接;left join表示左外鏈接;right join表示右外鏈接;full join表示徹底外鏈接。on 子句用於指定鏈接條件。基礎

注意:若是使用from子句指定內、外鏈接,則必須使用on子句指定鏈接條件;若是使用(+)操做符指定外鏈接,則必須使用where子句指定鏈接條件。select

若是主表的 主鍵列 和從表的 外部鍵列 名稱相同,那麼可使用 natural join 關鍵字自動執行內鏈接操做
搜索

select id,name from table1 natural join table2;

舉例子

create table1(a int,b int);

create table2(a int,b int);

內鏈接 select * from table1 a,table2 b where a.a=b.a;

左鏈接 select * from table1 a,table2 b where a.a=b.a(+);

右鏈接 select * from table1 a,table2 b where a.a(+)=b.a;

徹底鏈接 select * from table1 a,table2 b where a.a=b.a(+)

             union

             select * from table1 a,table2 b where a.a(+)=b.a;

笛卡爾積 select * from table1,table2;                        

若是a表有5行,b表有10行,則笛卡爾積以後一共有5*10=50行。




Oracle外鏈接

(1)左外鏈接(左邊的表不加限制)

(2)右外鏈接(右邊的表不加限制)

(3)全外鏈接(左右兩邊的表都不加限制)

外鏈接(Outer Join)

外鏈接會返回每一個知足第一個(頂端)輸入與第二個(底端)輸入的鏈接的行。它還會返回 任何在第二個輸入中沒有匹配行的第一個輸入中的行。外鏈接有三種:左外鏈接、右外鏈接、全外鏈接,對應的SQL語句是LEFT/RIGHT/FULL OUTER JOIN。一般咱們省略outer這個關鍵字,寫成:LEFT/RIGHT/FULL  JOIN.

在左外鏈接和右外鏈接的時候都會以一張表做爲基表,該表的內容會所有顯示,而後在加上兩張表匹配的內容。若是基表的數據在另外一張表中沒有記錄,那麼在相關聯的結果集行中列顯示爲空值。

對於外鏈接,也可使用(+)來表示,使用(+)號時要注意一些事項:

1>(+)號操做符只能出如今where子句中,而且不能和outer join語法同時使用。

2>當使用(+)操做符執行外鏈接時,若是在where子句中包含多個條件,則必須全部的條件都包含(+)操做符。

3>(+)操做符只適用於列,不能用在表達式上。

4>(+)操做符不能與or和in操做符一塊兒使用.

5>(+)操做符只能用於實現左外鏈接和右外鏈接,不能用於實現徹底外鏈接。

舉例子:

這裏有兩張表:dava表(左表)和bi表(右表)

select * from bi;

ID     NAME

1       dave

2       bi

3       big bird

4       exc

9       懷寧

select * from dave

ID     NAME

8       安慶

1        dava

2         bl

1         bl

2         dava

3         dba

4         sf

5         dmm

1.左外鏈接( left join)

left join是以左邊表的記錄爲基礎,它的結果集是dave表中的數據,再加上dave表和bi表匹配的數據。話句話說,左表(dave)的記錄會所有顯示出來,而右表(bl)只會顯示出符合搜索條件的記錄,bi表記錄不足的地方均爲null。

寫法示例:select * from dave a left join bi b on a.id=b.id;

ID   NAME        ID    NAME 

1     bl              1      dave

1     dave          1      dave

2     dave          2       bl

2     bl               2       bl

3     dba             3      big bird

4     sf                4      exc

5     dmm           --此處B表爲null,沒有匹配到

8     安慶             --此處B表爲null,沒有匹配到     

寫法示例:select * from dave a left outer join bl b on a.id = b.id;

ID   NAME        ID    NAME 

1     bl              1      dave

1     dave          1      dave

2     dave          2       bl

2     bl               2       bl

3     dba             3      big bird

4     sf                4      exc

5     dmm          

8     安慶               

用(+)來實現,+號表示補充,即哪一個表有+號,這個表就是匹配表。所以,加號寫在右表,則右表是匹配表,左表是基表,左表所有顯示,便是左鏈接。

寫法示例:select * from dave a,bl,b where a.id=b.id(+); --注意,使用(+)就要使用關鍵字where

ID   NAME        ID    NAME 

1     bl              1      dave

1     dave          1      dave

2     dave          2       bl

2     bl               2       bl

3     dba             3      big bird

4     sf                4      exc

5     dmm          

8     安慶    

2.右外鏈接

右外鏈接是以右表(bl)爲基礎,所以,會顯示bl表的全部記錄,再加上dave和bl匹配的結果,dave表不足的地方使用null填充。

寫法示例:select * from dave a right join bl b on a.id=b.id;

左表                 右表

ID  NAME        ID   NAME

1    dave          1    dave

2    bl              2    bl

1    bl              1    dave

2    dave          2    bl

3    dba            3    big bird

4    sf-express   4    exc

                        9    懷寧    --此處左表不足用Null 填充

(+)的寫法示例:select * from dave a,bi b where a.id(+)=b.id;

左表                 右表

ID  NAME        ID   NAME

1    dave          1    dave

2    bl              2    bl

1    bl              1    dave

2    dave          2    bl

3    dba            3    big bird

4    sf-express   4    exc

                        9    懷寧

3.全外鏈接

左表的右表都不作限制,全部的記錄都顯示,兩表不足的地方用null表示。全外鏈接不支持(+)這種寫法。

寫法示例:select * from dave a full join bl b on a.id=b.id;

ID   NAME               ID     NAME

8     安慶

1     dave                1        dave

2     bl                    2        bl

1     bl                    1        dave

2    dave                 2        bl

3    dba                  3        big bird

4    sf                     4        exc

5    dmm

                             9        懷寧

相關文章
相關標籤/搜索