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