這裡有兩張表TableA和TableB,分别是姓名表和年齡表,用于我們例子的測試資料
TableA
id | name |
1 | t1 |
2 | t2 |
4 | t4 |
TableB
age | |
18 | |
20 | |
3 | 19 |
在開發中我們的業務需求有時候是複雜的,多張表聯合查詢的時候是有多種方式的,面對不同的需求,
靈活使用不同的表連接配接方式,那麼表連接配接分成哪幾種呢?
表連接配接有幾種?
sql表連接配接分成外連接配接、内連接配接和交叉連接配接。
一.外連接配接
概述:
外連接配接包括三種,分别是左外連接配接、右外連接配接、全外連接配接。
對應的sql關鍵字:LEFT/RIGHT/FULL OUTER JOIN,通常我們都省略OUTER關鍵字,寫成LEFT/RIGHT/FULL JOIN。
在左、右外連接配接中都會以一種表為基表,基表的所有行、列都會顯示,外表如果和條件不比對則所有的外表列值都為NULL。
全外連接配接則所有表的行、列都會顯示,條件不比對的值皆為NULL。
1.左外連接配接示例:
sql語句: select * from TableA left join TableB on TableA.id=TableB.id
結果:
NULL |
注釋:TableA(基表)中所有的行列都顯示了,第三行的條件不比對所有TableB(外表)的值都為NULL。
2.右外連接配接示例:
sql語句: select * from TableA right join TableB on TableA.id=TableB.id
結果:
注釋:TableB(基表)中所有的行列都顯示了,第三行的條件不比對所有TableA(外表)的值都為NULL。
3.全外連接配接示例:
sql語句:select * from TableA full join TableB on TableA.id=TableB.id
注釋:TableA和TableB的所有行列都顯示了,條件不比對的行的值為NULL
二.内連接配接
概述:内連接配接是用比較運算符比較要連接配接的列的值的連接配接,不比對的行不會被顯示。sql關鍵字JOIN 或者INNER JOIN,通常我們寫成JOIN
例子:
select * from TableA JOIN TableB on TableA.id=TableB.id
結果:
注釋:隻傳回條件比對的行
以上寫法等效于:
select * from TableA,TableB where TableA.id=TableB.id
select * from TableA cross join TableB where TableA.id=TableB.id (cross join 後隻能用where不能用on)
三.交叉連接配接
概念:沒有where條件的交叉連接配接将産生連接配接表所涉及的笛卡爾積。即TableA的行數*TableB的行數的結果集。(TableA 3行*TableB 3行=9行)
sql語句:
select * from TableA cross join TableB
注釋:傳回3*3=9行資料,即笛卡爾積。
select * from TableA,TableB歡迎大家一起說出自己的想法。