oracle左外連線、右外連線、完全外連線以及(+)號用法
阿新 • • 發佈:2019-01-10
準備工作
oracle連線分為:- 左外連線:左表不加限制,保留左表的資料,匹配右表,右表沒有匹配到的行中的列顯示為null。
- 右外連線:右表不加限制,保留右表的資料。匹配左表,左表沒有匹配到的行中列顯示為null。
- 完全外連線:左右表都不加限制。即右外連線的結果為:左右表匹配的資料+左表沒有匹配到的資料+右表沒有匹配到的資料。
- left/right/full outer join ...on
- left/right/full join ...on
CREATE TABLE t_A ( id number, name VARCHAR2(10) ); CREATE TABLE t_B ( id number, name VARCHAR2(10) ); INSERT INTO t_A VALUES(1,'A'); INSERT INTO t_A VALUES(2,'B'); INSERT INTO t_A VALUES(3,'C'); INSERT INTO t_A VALUES(4,'D'); INSERT INTO t_A VALUES(5,'E'); INSERT INTO t_B VALUES(1,'AA'); INSERT INTO t_B VALUES(1,'BB'); INSERT INTO t_B VALUES(2,'CC'); INSERT INTO t_B VALUES(1,'DD'); INSERT INTO t_B VALUES(7,'GG');
左外連線
select * from t_a a left join t_b b on a.id=b.id;
select * from t_a a,t_b b where a.id=b.id(+);
右外連線
select * from t_a a right join t_b b on a.id = b.id;
select * from t_a a,t_b b where a.id(+)=b.id;
完全外連線
select * from t_a a full join t_b b on a.id=b.id;
等值連線(我們在看看等值連線的結果)
select * from t_a a,t_b b where a.id=b.id; select * from t_a a join t_b b on a.id=b.id;--等值連線也可以這樣寫
注意:以前理解等值連線和完全外連線是一回事,現在看來是我理解錯了。等值連線是隻把滿足條件的兩個表的行相連,然後顯示出來。完全外連線是把匹配查詢條件的行、左表沒有匹配到的、右表沒有匹配到的都顯示出來。