Oracle的外連線(left/right/full)和內連線(inner)
阿新 • • 發佈:2018-11-11
外連線分為三種:
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