天天看點

sql表連接配接的幾種方式

這裡有兩張表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歡迎大家一起說出自己的想法。