1. 程式人生 > >oracle左外連線、右外連線、完全外連線以及(+)號用法

oracle左外連線、右外連線、完全外連線以及(+)號用法

準備工作

oracle連線分為:
  1. 左外連線:左表不加限制,保留左表的資料,匹配右表,右表沒有匹配到的行中的列顯示為null。
  2. 右外連線:右表不加限制,保留右表的資料。匹配左表,左表沒有匹配到的行中列顯示為null。
  3. 完全外連線:左右表都不加限制。即右外連線的結果為:左右表匹配的資料+左表沒有匹配到的資料+右表沒有匹配到的資料。
連線的語法:
  1. left/right/full outer join ...on
  2. 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;--等值連線也可以這樣寫

注意:以前理解等值連線和完全外連線是一回事,現在看來是我理解錯了。等值連線是隻把滿足條件的兩個表的行相連,然後顯示出來。完全外連線是把匹配查詢條件的行、左表沒有匹配到的、右表沒有匹配到的都顯示出來。