sql錶鏈接的幾種方式

這裏有兩張表TableA和TableB,分別是姓名錶和年齡表,用於咱們例子的測試數據
TableA
id
name
1
t1
2
t2
4
t4
TableB
id
age
1
18
2
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
    結果:
id
name
id
age
1
t1
1
18
2
t2
2
20
4
t4
NULL
NULL

    註釋:TableA(基表)中全部的行列都顯示了,第三行的條件不匹配全部TableB(外表)的值都爲NULL。sql

    
    2.右外鏈接示例:
    sql語句: select * from TableA right join TableB on TableA.id=TableB.id
    結果:
id
name
id
age
1
t1
1
18
2
t2
2
20
NULL
NULL
3
19
 註釋:TableB(基表)中全部的行列都顯示了,第三行的條件不匹配全部TableA(外表)的值都爲NULL。
 
    3.全外鏈接示例:
    sql語句:select * from TableA full join TableB on TableA.id=TableB.id
    結果:
    
id
name
id
age
1
t1
1
18
2
t2
2
20
NULL NULL 3
19
4 t4
NULL
NULL

註釋:TableA和TableB的全部行列都顯示了,條件不匹配的行的值爲NULL測試

 
二.內鏈接

概述:內鏈接是用比較運算符比較要鏈接的列的值的鏈接,不匹配的行不會被顯示。sql關鍵字JOIN 或者INNER JOIN,一般咱們寫成JOIN
例子:
    select * from TableA JOIN TableB on TableA.id=TableB.id
結果:
    
id
name
id
age
1
t1
1
18
2
t2
2
20
註釋:只返回條件匹配的行
 
以上寫法等效於:
    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
結果:
id
name
id
age
1
t1
1
18
2
t2
1
18
4
t4
1
18
1
t1
2
20
2
t2
2
20
4
t4
2
20
1
t1
3
19
2
t2
3
19
4
t4
3
19
註釋:返回3*3=9行數據,即笛卡爾積。
 
以上寫法等效於:
select * from TableA,TableB
相關文章
相關標籤/搜索