對(duì)于還在SQL初級(jí)階段的朋友來說,sql多表查詢問題是一個(gè)比較有趣也容易出錯(cuò)的技術(shù)。什么時(shí)候會(huì)用到sql多表查詢呢?是在兩張或兩張以上表單中通過某幾個(gè)字段進(jìn)行互聯(lián)管理的時(shí)候,這就不得不說說sql多表查詢中Where 和 On的秘密。
?
在了解 sql多表查詢中Where 和 On的秘密之前,讓我們先來溫習(xí)一下連接基礎(chǔ)吧
按列a把兩表連接,請(qǐng)問各種連接方式的結(jié)果的結(jié)果?
語法呢?
左??? select * from @a Aa left join @b Bb on Aa.a=Bb.a
右??? select * from @a Aa right join @b Bb on Aa.a=Bb.a
內(nèi)??? select * from @a Aa join @b Bb on Aa.a=Bb.a
完全?????? select * from @a Aa full join @b Bb on Aa.a=Bb.a
迪卡爾??? select * from @a,@b
是不是很簡單呢,接下來我們來看sql多表查詢中Where 和 On的秘密:)
?
大家想想,依據(jù)下表
下面語句出來的結(jié)果是什么?
?
select * from @a _a left join @b _b on _a.id=_b.id where _b.name=1
select * from @a _a left join @b _b on _a.id=_b.id and _b.name=1
先想想,再看結(jié)果吧^_*
sql多表查詢中 Where? 和 On 的秘密 在SQLserver 中的執(zhí)行順序是: 先join后where
所以,當(dāng)條件寫在where里,結(jié)果如下:
條件寫在on里,結(jié)果如下:
Where 和 On是不是很有趣,你也試試吧!
?
下一個(gè)
請(qǐng)說出下面語句各返回多少記錄
select * from @a a left join @b b on a.id=b.id where a.id=1
select * from @a a left join @b b on a.id=b.id and b.id=1
select * from @a a left join @b b on a.id=b.id and a.id=1
select * from @a a left join @b b on a.id=1
先想想,再看答案:P
—??????? select * from @a a left join @b b on a.id=b.id where a.id=1
?
—??????? 原因是先執(zhí)行連接條件,再執(zhí)行where部分,所以只有1條記錄
?
—??????? select * from @a a left join @b b on a.id=b.id and b.id=1
?
—??????? 原因是滿足a.id=b.id and a.id=1 條件的只有一條,但left join是對(duì)沒有附和條件的加null處理,所以最后結(jié)果是3條
?
—??????? select * from @a a left join @b b on a.id=b.id and a.id=1
?
—??????? 原因是滿足a.id=b.id and a.id=1 條件的只有一條,但left join是對(duì)沒有附和條件的加null處理,所以最后結(jié)果是3條
?
—??????? select * from @a a left join @b b on a.id=1
?
—??????? 原因是在做完迪卡爾后,滿足a.id=1 條件的有3條,但left join是對(duì)沒有附和條件的加null處理,所以最后結(jié)果是5條
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
