SQL 四种连接:内连接、左外连接、右外连接、全连接--转载
原文:http://zwdsmileface.iteye.com/blog/2191730
個(gè)人理解?
內(nèi)連接(INNER JOIN)(典型的連接運(yùn)算,使用像?? =?? 或?? <>?? 之類的比較運(yùn)算符)。包括相等連接和自然連接。 內(nèi)連接使用比較運(yùn)算符根據(jù)每個(gè)表共有的列的值匹配兩個(gè)表中的行?
左連接(LEFT?? JOIN?? 或?? LEFT?? OUTER?? JOIN)是右左邊表中的數(shù)據(jù)為基準(zhǔn),若左表有數(shù)據(jù)右表沒(méi)有數(shù)據(jù),否則顯示左表中的數(shù)據(jù)右表中的數(shù)據(jù)顯示為空?
右連接(RIGHT? JOIN? 或? RIGHT?? OUTER?? JOIN)是以右邊表中的數(shù)據(jù)為基準(zhǔn),若右表有數(shù)據(jù)左表沒(méi)有數(shù)據(jù),否則顯示右表中的數(shù)據(jù)左表中的數(shù)據(jù)顯示為空?
全連接( FULL?? JOIN?? 或?? FULL?? OUTER?? JOIN)?? 完整外部連接返回左表和右表中的所有行。當(dāng)某行在另一個(gè)表中沒(méi)有匹配行時(shí),則另一個(gè)表的選擇列表列包含空值。如果表之間有匹配行,則整個(gè)結(jié)果集行包含基表的數(shù)據(jù)值。?
下面用幾個(gè)實(shí)例來(lái)詳細(xì)說(shuō)明?
兩個(gè)表:?
A(id,name)?
數(shù)據(jù):(1,張三)(2,李四)(3,王五)?
B(id,name)?
數(shù)據(jù):(1,學(xué)生)(2,老師)(4,校長(zhǎng))?
內(nèi)連接結(jié)果:?
select A.*,B.* from A inner join B on A.id=B.id;?
1 張三 1??? 學(xué)生?
2 李四 2??? 老師?
左連接結(jié)果:?
select A.*,B.* from A left join B on A.id=B.id;?
1 張三 1??? 學(xué)生?
2 李四 2??? 老師?
3 王五 NULL NULL?
右連接結(jié)果:?
select A.*,B.* from A right join B on A.id=B.id;?
1??? 張三 1 學(xué)生?
2??? 李四 2 老師?
NULL NULL 4 校長(zhǎng)?
全連接結(jié)果?
select A.*,B.* from A full join B on A.id=B.id;?
1 張三 1??? 學(xué)生?
2 李四 2??? 老師?
3 王五 NULL NULL?
NULL NULL 4 校長(zhǎng)?
****************?
補(bǔ)充:下面這種情況就會(huì)用到外連接?
比如有兩個(gè)表一個(gè)是用戶表,一個(gè)是交易記錄表,如果我要查詢每個(gè)用戶的交易記錄就要用到左外外連接,因?yàn)椴皇敲總€(gè)用戶都有交易記錄。?
用到左外連接后,有交易記錄的信息就會(huì)顯示,沒(méi)有的就顯示NULL,就像上面我舉得例子一樣。?
如果不用外連接的話,比如【王五】沒(méi)有交易記錄的話,那么用戶表里的【王五】的信息就不會(huì)顯示,就失去了查詢所有用戶交易記錄的意義了。?
****************?
看一下結(jié)果就能明白各種連接的區(qū)別了。
轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/p/4334245.html
總結(jié)
以上是生活随笔為你收集整理的SQL 四种连接:内连接、左外连接、右外连接、全连接--转载的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Redis的安装、配置 --转载
- 下一篇: mysql重连,连接丢失:The las