SQL中聯(lián)合查詢條件和過濾條件的區(qū)別

一個一直我困擾很久的問題,SQL語句中這兩種寫法有什么區(qū)別嗎?

select * from a,b  where a.id = b.id
select * from a inner join b on a.id =b.id

查詢結(jié)果是一樣的
那么,連接查詢join后的限制條件 on 和where又有什么區(qū)別呢?
用left join做實驗比較清楚

select * from a,b where a.id between 1000 and 2000
select * form a left join b on a.id between 1000 and 2000

可以看到
第一句SQL查詢了所有a表,b表查詢項目僅限于1表中a.id在1000~2000之間的,on關(guān)鍵字篩選了a表的結(jié)果將b表連接到了與a表結(jié)果匹配的行
如果要得到等同于第一句的SQL
需要再添加where條件

select * from a,b where a.id between 1000 and 2000
select * form a left join b on a.id between 1000 and 2000 where a.id between 1000 and 2000

另外一點發(fā)現(xiàn):
對于left join,不管on后面跟什么條件,左表的數(shù)據(jù)全部查出來,因此要想過濾需把條件放到where后面。
where條件是在聯(lián)合條件臨時表生成好后,再對臨時表進(jìn)行過濾的條件,如果過濾的是左連接的主表,則沒有問題,如果過濾的是左連接的從表,那前面的left join 就沒有了意義,查詢等同于inner join;

過濾條件放在 where后面:是先連接然生成臨時查詢結(jié)果,然后再篩選
過濾條件放在 on后面:先根據(jù)條件過濾篩選,再連,生成臨時查詢結(jié)果

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容