1. 程式人生 > >Oracle的外連線(left/right/full)和內連線(inner)

Oracle的外連線(left/right/full)和內連線(inner)

外連線分為三種:

1. 左外連線,對應SQL關鍵字:LEFT (OUTER) JOIN

2. 右外連線,對應SQL關鍵字:RIGHT (OUTER) JOIN

3. 全外連線,對應SQL關鍵字:FULL (OUTER) JOIN

左右外連線都是以一張表為基表,在顯示基表所有記錄外,加上另外一張表中匹配的記錄。如果基表的資料在另一張表中沒有記錄,那麼相關聯的結果集行中顯示為空值。

準備: TEST_LEFT_JOIN 為左表,TEST_RIGHT_JOIN 為右表

select * from TEST_LEFT_JOIN t

insert into TEST_LEFT_JOIN t values('1','劉備');
insert into TEST_LEFT_JOIN t values('2','關羽');
insert into TEST_LEFT_JOIN t values('3','張飛');

select * from TEST_RIGHT_JOIN t

insert into TEST_RIGHT_JOIN t values('2','黃忠');
insert into TEST_RIGHT_JOIN t values('3','周瑜');
insert into TEST_RIGHT_JOIN t values('6','曹操');

 

 左連線:

(1):從排序看,左右表匹配的記錄排在前面,並且是升序

select * from test_left_join l left join test_right_join r on l.id = r.id 

(2):也可以這樣寫:使用(+),放右表表示左表所有記錄,再加上右表的記錄。

“+” 號在哪個表旁邊,就加上哪個表的記錄

select * from test_left_join l,test_right_join r where l.id = r.id(+) 

 (3):將where條件中左右表互換,結果還是左連線,因為(+)在左邊,表示加上right表的記錄

右連線:

select * from test_left_join l right join test_right_join r on l.id = r.id 

其他和左連線一致

 

全外連線:會顯示左右表的記錄,不匹配的用NULL。

(1)

select * from test_left_join l full join test_right_join r on l.id = r.id 

(2)

select * from test_left_join l full outer join test_right_join r on l.id = r.id 

 

 

內連線: innse join或join

(1)用inner join只顯示左右表都匹配的記錄。

select * from test_left_join l inner join test_right_join r on l.id = r.id 

 

(2)直接用join和inner join相同

select * from test_left_join l join test_right_join r on l.id = r.id 

 (3)用=代替on是內連線另外一種用法

select * from test_left_join l ,test_right_join r where l.id = r.id