這裡有兩張表tablea和tableb,分別是姓名錶和年齡表,用於我們例子的測試資料
tablea
idname1t1
2t24t4
tableb
idage118
220319
在開發中我們的業務需求有時候是複雜的,多張表聯合查詢的時候是有多種方式的,面對不同的需求,
靈活使用不同的表連線方式,那麼表連線分成哪幾種呢?
表連線有幾種?
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
idage1t1
1182t2
2204t4
null
null
註釋:tablea(基表)中所有的行列都顯示了,第三行的條件不匹配所有tableb(外表)的值都為null。
2.右外連線示例:
sql語句: select * from tablea right join tableb on tablea.id=tableb.id
結果:id
name
idage1t1
1182t2
220null
null319
註釋:tableb(基表)中所有的行列都顯示了,第三行的條件不匹配所有tablea(外表)的值都為null。
3.全外連線示例:
sql語句:select * from tablea full join tableb on tablea.id=tableb.id
結果:id
name
idage1t1
1182t2
220null
null319
4t4null
null
註釋:tablea和tableb的所有行列都顯示了,條件不匹配的行的值為null
二.內連線
概述:內連線是用比較運算子比較要連線的列的值的連線,不匹配的行不會被顯示。sql關鍵字join 或者inner join,通常我們寫成join
例子:select * from tablea join tableb on tablea.id=tableb.id
結果:id
name
idage1t1
1182t2
220註釋:只返回條件匹配的行
以上寫法等效於:
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
idage1t1
1182t2
1184t4
1181t1
2202t2
2204t4
2201t1
3192t2
3194t4
319註釋:返回3*3=9行資料,即笛卡爾積。
以上寫法等效於:
select * from tablea,tableb
SQL的表連線方式有哪些?
sql中連線按結果集分為 內連線,外連線,交叉連線 內連線 inner join on,兩表都滿足的組合。內連線分為等值連線,不等連線,自然連線。等值連線 兩表中相同的列都會出現在結果集中。自然連線 兩表中具體相同列表的列會合併為同一列出現在結果集中。外連線 分為左 外 連線,右 外 連線,全連線 ...
sql表連線的幾種方式
這裡有兩張表tablea和tableb,分別是姓名錶和年齡表,用於我們例子的測試資料 tablea idname1t1 2t24t4 tableb idage118 220319 在開發中我們的業務需求有時候是複雜的,多張表聯合查詢的時候是有多種方式的,面對不同的需求,靈活使用不同的表連線方式,那麼...
SQL查詢 主從表 報表方式顯示
測試表與測試資料 create table test main id int,value varchar 10 primary key id 建立測試子表.create table test sub id int,main id int,value varchar 10 primary key id...