資料庫內連線、外連線 、交叉連線
資料庫連線分為:內連線 外連線 交叉連線 (即笛卡爾積)
內連線(INNER JOIN):分為三種:等值連線、自然連線、不等連線
外連線(OUTER JOIN):分為三種:左外連線(LEFT JOIN)、右外連線(RIGHT JOIN)、全外連線(FULL JOIN)
交叉連線(CROSS JOIN):沒有where 子句,它返回連線表中所有資料行的笛卡爾積
- 並集UNION:select col1,col2 from A UNION select col1,col2 from B ;
- 交集JOIN:select * from A JOIN B on A.name=B.name;
- 差集NOT:select * from A where name NOT IN(select name from B);
- 笛卡爾積CROSS JOIN:select * from A CROSS JOIN B; (等價於select * from A,B;)
SQL中的UNION與UNION ALL的區別:前者會去重,後者保留相同的;
交叉連線 CROSS JOIN: 如果不帶WHERE條件子句,它將會返回被連線的兩個表的笛卡爾積,返回結果的行數等於兩個錶行數的乘積::笛卡爾積CROSS JOIN:select * from A CROSS JOIN B; (等價於select * from A,B;) ; --------- 一般不建議使用該方法,因為如果有WHERE子句的話,往往會先生成兩個錶行數乘積的行的資料表然後才根據where條件中選擇;;不適合大的表
內連線:INNER JOIN
如果僅僅使用 SELECT * FROM A INNER JOIN B 沒有指定連線條件的話,和交叉連線的結果一樣;
如果指定條件,如下:
--等值連線(不去重):selecr * from A INNER JOIN B on A.col=B.col;
--不等連線:select * from A INNER JOIN B on A.col>B.col;
--自然連線(去重)(公共屬性只保留一個):(通過相同名字的屬性連線的結果就是自然連線)
外連線 OUTER JOIN:
首先內連線和外連線的不同之處: 內連線如果沒有指定連線條件的話,和笛卡爾積的交叉連線結果一樣,但
是不同於笛卡爾積的地方是,沒有笛卡爾積那麼複雜地要先生成行數乘積的資料表,內連線的效率要高於笛卡
爾積的交叉連線。
·指定條件的內連線,僅僅返回符合連線條件的條目。
·外連線則不同,返回的結果不僅包含符合連線條件的行,而且包括左表(左外連線時), 右表 (右連線時)或者兩邊連線(全外連線時)的所有資料行。
--左外連線LEFT JOIN:除了顯示符合條件的資料行外,還顯示左邊資料表不符合條件的資料行;;要是右邊沒有對應的行,就顯示NULL;(select A LEFT JOIN B on A.col=B.col;)
--右外連線RIGHT JOIN:除了顯示符合條件的資料行外,還顯示右邊資料表不符合條件的資料行;;要是左邊沒有對應的行,就顯示NULL;(select A RIGHT JOIN B on A.col=B.col;)
--全外連線FULL OUTER JOIN:除了顯示符合條件的資料行外,還顯示左邊和右邊資料表不符合條件的資料行;;要是沒有對應的行,就顯示NULL;(select A FULL OUT JOIN B on A.col=B.col;)
如果把捨棄的元組也儲存在結果關係中,而在其他屬性上空值,那麼這種連線就叫外連線。如果只把左邊關係R要捨棄的元組保留就叫左外連線,如果只把右邊關係S中要捨棄的元組保留右外連線。
例子:
表A |
表B |
selecr * from A natural join B on A.Id=B.Id;自然連線的結果:
Id |
a |
b |
c |
d |
2 |
5 |
4 |
2 |
3 |
selecr * from A left join B on A.Id=B.Id;左連線的結果:
Id |
a |
b |
c |
d |
1 |
2 |
3 |
Null |
Null |
2 |
4 |
4 |
2 |
3 |
selecr * from A full out join B on A.Id=B.Id;全外連線的結果:
Id |
a |
b |
c |
d |
1 |
2 |
3 |
Null |
Null |
2 |
5 |
4 |
2 |
3 |
3 |
Null |
Null |
9 |
4 |
selecr * from A cross join B;交叉連線的結果:
IdA |
IdB |
a |
b |
c |
d |
1 |
2 |
2 |
3 |
2 |
3 |
1 |
3 |
2 |
3 |
9 |
4 |
2 |
2 |
5 |
4 |
2 |
3 |
2 |
3 |
5 |
4 |
9 |
4 |