對于還在SQL初級階段的朋友來說,sql多表查詢問題是一個比較有趣也容易出錯的技術。什么時候會用到sql多表查詢呢?是在兩張或兩張以上表單中通過某幾個字段進行互聯管理的時候,這就不得不說說sql多表查詢中Where 和 On的秘密。
?
在了解 sql多表查詢中Where 和 On的秘密之前,讓我們先來溫習一下連接基礎吧
按列a把兩表連接,請問各種連接方式的結果的結果?
語法呢?
左??? 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
內??? 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的秘密:)
?
大家想想,依據下表
下面語句出來的結果是什么?
?
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
先想想,再看結果吧^_*
sql多表查詢中 Where? 和 On 的秘密 在SQLserver 中的執行順序是: 先join后where
所以,當條件寫在where里,結果如下:
條件寫在on里,結果如下:
Where 和 On是不是很有趣,你也試試吧!
?
下一個
請說出下面語句各返回多少記錄
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
?
—??????? 原因是先執行連接條件,再執行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是對沒有附和條件的加null處理,所以最后結果是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是對沒有附和條件的加null處理,所以最后結果是3條
?
—??????? select * from @a a left join @b b on a.id=1
?
—??????? 原因是在做完迪卡爾后,滿足a.id=1 條件的有3條,但left join是對沒有附和條件的加null處理,所以最后結果是5條
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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