sql多表查询之一:Where 和 On的秘密
原文?sql多表查詢之一:Where 和 On的秘密
對于還在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條
總結
以上是生活随笔為你收集整理的sql多表查询之一:Where 和 On的秘密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【 Grey Hack 】记一次被黑经历
- 下一篇: MindMaster for Mac(亿