資料庫中涉及兩個表之間的資料查詢通常使用連線的方法實現。連線分為內連線和外連線。
內連線:
指連線結果僅包含符合連線條件的行,參與連線的兩個表都應該符合連線條件。外連線:
連線結果不僅包含符合連線條件的行同時也包含自身不符合條件的行。包括左外連線、右外連線和全外連線。左外連線:
左邊表資料行全部保留,右邊表保留符合連線條件的行
右外連線:
右邊表資料行全部保留,左邊表保留符合連線條件的行
全外連線:
左外連線 union 右外連線
例子:
資料庫版本:oracle 9i
表testa,testb,testc,各有a, b兩列 a
b001
10a
00220a
a b
001
10b003
30b
a b
001
10c004
40c
連線分為兩種:內連線與外連線。
a.內連線
內連線,即最常見的等值連線,例:
select*
fromtesta,testb
wheretesta.a=testb.a結果
a b
a b
001
10a
001
10b
b.外連線
外連線分為左外連線,右外連線和全外連線。
1.左外連線left outer join 或者 left join
左外連線就是在等值連線的基礎上加上主表中的未匹配資料,例:
select*
fromtesta
left outer jointestb
ontesta.a=testb.a
oracle 支援另一種寫法
select*
fromtesta,testb
wheretesta.a=testb.a(+)
結果: a
b a
b 001
10a
001
10b
00210b
三個表做左外連線
select*
fromtesta
left outer jointestb
ontesta.a=testb.a
left outer jointestc
ontesta.a=testc.a
oracle 支援的另外一種寫法
select*
fromtesta,testb,testc
wheretesta.a=testb.a(+)
andtesta.a=testc.a(+)
結果: a
b ab a
b001
10a
001
10b
001
10c002
20a
2.右外連線right outer join 或者 right join
右外連線是在等值連線的基礎上加上被連線表的不匹配資料
select*
fromtesta
right outer jointestb
ontesta.a=testb.a
oracle支援的另一種寫法
select*
fromtesta,testb
wheretesta.a(+)=testb.a
結果: a
b ab
001
10a
001
10b
00330b
3.全外連線full outer join 或者 full join
全外連線是在等值連線的基礎上將左表和右表的未匹配資料都加上
select*
fromtesta
full outer jointestb
ontesta.a=testb.a
全外連線的等價寫法,對同一表先做左連線,然後右連線
selecttesta.*,testb.*
fromtesta
left outer jointestb
ontesta.a=testb.a
union
selecttesta.*,testb.*
fromtestb
left outer jointesta
ontesta.a=testb.a
結果: a
b a
b 001
10a
001
10b002
20a
00330b
資料庫 內連線 外連線 左連線
總結 內連線 僅僅顯示匹配的行 外連線 設法顯示不匹配的行,包括左 外 連線 右 外 連線 全 外 連線 左 外 連線 左表的行全顯示 右表不存在匹配時填null 右 外 連線 右表的行全顯示 左表不存在匹配時填null 全 外 連線 左連線和右連線的結果再做合併 union sql ansi的寫法...
資料庫內連線和外連線的區別
內連線 指連線結果僅包含符合連線條件的行,參與連線的兩個表都應該符合連線條件。外連線 連線結果不僅包含符合連線條件的行同時也包含自身不符合條件的行。包括左外連線 右外連線和全外連線。1 內連線 內連線,即最常見的等值連線,例 select from testa,testbwhere testa.a ...
資料庫 內連線 左外連線 右外連線 全外連線
內連線中,只有滿足連線條件的元組才能作為結果輸出,即當任乙個表中為null則不會輸出。sql 語句 123 select first.cno,second.cpno from course first,course second where first.cpno second.cno 如果在查詢時需...