閱讀733 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Oracle中的JOIN

一、兩張表

Student表

SID                  SNAME                CLASSID

-------------------- -------------------- --------------------
001                  小明                 1
002                  小紅                 2
003                  小張                 4

Class表
ID                   NAME
-------------------- --------------------
1                    一班
2                    二班
3                    三班


二、自連接
隻返回兩張表連接列的匹配項。以下三種效果相同
select * from student s inner join class c on s.classid = c.id;
select * from student s join class c on s.classid = c.id;
select * from student s,class c where s.classid = c.id;

SID                  SNAME                CLASSID              ID                   NAME
-------------------- -------------------- -------------------- -------------------- --------------
001                  小明                 1                    1                    一班
002                  小紅                 2                    2                    二班

 

三、笛卡兒乘積連接
即不加任何條件,達到 M*N 的結果集。以下兩種查詢結果一樣。
select * from student s cross join class c;
select * from student,class;

SID                  SNAME                CLASSID              ID                   NAME
-------------------- -------------------- -------------------- -------------------- --------------
001                  小明                 1                    1                    一班
001                  小明                 1                    2                    二班
001                  小明                 1                    3                    三班
002                  小紅                 2                    1                    一班
002                  小紅                 2                    2                    二班
002                  小紅                 2                    3                    三班
003                  小張                 4                    1                    一班
003                  小張                 4                    2                    二班
003                  小張                 4                    3                    三班

除了cross join不可以加on外,其它join連接都必須加上on關鍵字,後都可加where條件。加上條件,產生跟自連接一樣的結果。
select * from student s cross join class c where s.classid = c.id;


四、左連接
列出左邊表全部的,及右邊表符合條件的,不符合條件的以空值代替。在(+)計算時,哪個帶(+)哪個需要條件符合的,另一個全部的。即放左即右連接,放右即左連接。以下結果集相同。

select * from student s left join class c on s.classid = c.id;
select * from student s,class c where s.classid = c.id(+);

SID                  SNAME                CLASSID              ID                   NAME
-------------------- -------------------- -------------------- -------------------- --------------
001                  小明                 1                    1                    一班
002                  小紅                 2                    2                    二班
003                  小張                 4


五、右連接
與左連接一樣,列出右邊表全部的,及左邊表符合條件的,不符合條件的用空值替代。(+)一樣,它的位置與連接相反。
select * from student s right join class c on s.classid = c.id;
select * from student s,class c where s.classid(+) = c.id;

SID                  SNAME                CLASSID              ID                   NAME
-------------------- -------------------- -------------------- -------------------- --------------
001                  小明                 1                    1                    一班
002                  小紅                 2                    2                    二班
                                                                      3                    三班  

六、全連接
產生M+N的結果集,列出兩表全部的,不符合條件的,以空值代替。
select * from student s full join class c on s.classid = c.id;

SID                  SNAME                CLASSID              ID                   NAME
-------------------- -------------------- -------------------- -------------------- --------------
001                  小明                 1                    1                    一班
002                  小紅                 2                    2                    二班
003                  小張                 4                                        

                                                                      3                    三班

七、總結

(+)連接符隻能Oracl中應用,join等語句其他數據庫也適用。


原帖地址:https://www.cnblogs.com/lovemoon714/archive/2012/03/02/2376782.html


最後更新:2017-04-03 20:19:52

  上一篇:go 這些人和事,埋葬了雅虎中國
  下一篇:go Oracle中的JOIN