MySQL-資料庫內連線與外連線與交叉連線
資料庫中涉及兩個表之間的資料查詢通常使用連線的方法實現。連線分為內連線和外連線。
內連線:
指連線結果僅包含符合連線條件的行,參與連線的兩個表都應該符合連線條件。
外連線:
連線結果不僅包含符合連線條件的行同時也包含自身不符合條件的行。包括左外連線、右外連線和全外連線。
左外連線:
左邊表資料行全部保留,右邊表保留符合連線條件的行
右外連線:
右邊表資料行全部保留,左邊表保留符合連線條件的行
全外連線:
左外連線 union 右外連線
例子:
表TESTA,TESTB,TESTC,各有A, B兩列
A
B
001
10A
002
20A
A
B
001
10B
003
30B
A
B
001
10C
004
40C
連線分為兩種:內連線與外連線。
A.內連線
內連線,即最常見的等值連線,例:
SELECT *
FROM TESTA,TESTB
WHERE TESTA.A=TESTB.A
結果
A
B
A
B
001
10A
001
10B
B.外連線
外連線分為左外連線,右外連線和全外連線。
1. 左外連線 left outer join 或者 left join
左外連線就是在等值連線的基礎上加上主表中的未匹配資料,例:
SELECT *
FROM TESTA
LEFT OUTER JOIN TESTB
ON TESTA.A=TESTB.AOracle 支援另一種寫法
SELECT *
FROM TESTA,TESTB
WHERE TESTA.A=TESTB.A(+)結果:
A
B
A
B
001
10A
001
10B
002
10B
三個表做左外連線
SELECT *
FROM TESTA
LEFT OUTER JOIN TESTB
ON TESTA.A=TESTB.A
LEFT OUTER JOIN TESTC
ON TESTA.A=TESTC.AOracle 支援的另外一種寫法
SELECT *
FROM TESTA,TESTB,TESTC
WHERE TESTA.A=TESTB.A(+)
AND TESTA.A=TESTC.A(+)結果:
A
B
A
B
A
B
001
10A
001
10B
001
10C
002
20A
2. 右外連線 right outer join 或者 right join
右外連線是在等值連線的基礎上加上被連線表的不匹配資料
SELECT *
FROM TESTA
RIGHT OUTER JOIN TESTB
ON TESTA.A=TESTB.A
Oracle支援的另一種寫法
SELECT *
FROM TESTA,TESTB
WHERE TESTA.A(+)=TESTB.A結果:
A
B
A
B
001
10A
001
10B
003
30B
3.全外連線 full outer join 或者 full join
全外連線是在等值連線的基礎上將左表和右表的未匹配資料都加上
SELECT *
FROM TESTA
FULL OUTER JOIN TESTB
ON TESTA.A=TESTB.A全外連線的等價寫法,對同一表先做左連線,然後右連線
SELECT TESTA.*,TESTB.*
FROM TESTA
LEFT OUTER JOIN TESTB
ON TESTA.A=TESTB.A
UNION
SELECT TESTA.*,TESTB.*
FROM TESTB
LEFT OUTER JOIN TESTA
ON TESTA.A=TESTB.A結果:
A
B
A
B
001
10A
001
10B
002
20A
003
30B
交叉連線
也就是笛卡爾乘積。
自然連線
自然連線(natural join)
自然連線是一種特殊的等值連線,他要求兩個關係表中進行比較的必須是相同的屬性列,無須新增連線條件,並且在結果中消除重複的屬性列。
內連線(inner join)
內連線基本與自然連線相同,不同之處在於自然連線要求是同名屬性列的比較,而內連線則不要求兩屬性列同名,可以用using或on來指定某兩列欄位相同的連線條件。