在瞭解sql多表查詢中Where 和 On的祕密以前,讓咱們先來溫習一下鏈接基礎吧sql
語法呢?spa
左 select * from @a Aa left join @b Bb on Aa.a=Bb.aorm
右 select * from @a Aa right join @b Bb on Aa.a=Bb.aserver
內 select * from @a Aa join @b Bb on Aa.a=Bb.ablog
徹底 select * from @a Aa full join @b Bb on Aa.a=Bb.aci
迪卡爾 select * from @a,@bget
是否是很簡單呢,接下來咱們來看sql多表查詢中Where 和 On的祕密:)ast
你們想一想,依據下表class
下面語句出來的結果是什麼?基礎
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的祕密》給你們轉載的這篇文章是否是頗有用呢,但願對IT朋友有幫助。