mysql中l(wèi)eft join設(shè)置條件在on與where時的用法區(qū)別分析
本文實例講述了mysql中l(wèi)eft join設(shè)置條件在on與where時的用法區(qū)別。分享給大家供大家參考,具體如下:
一、首先我們準備兩張表來進行測試。
CREATE TABLE `a` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(32) DEFAULT '' COMMENT '名稱', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `b` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `a_id` int(11) DEFAULT '0' COMMENT 'a表ID', `name` varchar(32) DEFAULT '' COMMENT '名稱', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
兩個表的數(shù)據(jù)如圖所示:
運行下面左連接查詢:
select * from a left join b on a.id = b.a_id;
我們分別在on和where后面加上條件,看看執(zhí)行結(jié)果是否相同。
select * from a left join b on a.id = b.a_id and b.id > 3;
select * from a left join b on a.id = b.a_id where b.id > 3;
上面的兩條語句,條件我們設(shè)置的是一樣的都是b.id > 3,為什么顯示結(jié)果不同。
sql語句查詢的關(guān)鍵字順序一般為 from > where > group by > having > order by
left join 在 from范圍,on 條件會先對 left join 的右表進行篩選,篩選完后的結(jié)果 where 再進行篩選。
多個 left join 會生成一張臨時表,on 條件是對 left join 右表進行條件過濾,where 條件針對最后生成的臨時表進行過濾。
所以:
b.id > 3 的條件如果寫在 on 后面,則是先對右邊表(關(guān)聯(lián)表)進行篩選,得出符合條件的行,然后主表 left join ,返回主表所有的行,右邊表沒匹配上的用 null 表示。
b.id > 3 的條件如果寫在 where 后面,則是先主表 left join 右邊表(關(guān)聯(lián)表),返回所有的行,然后 where 條件再對結(jié)果進行篩選。
注意:on 后面的條件是針對右邊的表(關(guān)聯(lián)表),對主表沒什么作用。
select * from a left join b on a.id = b.a_id and a.id > 3;
我們在on 后面添加了對主表的條件 a.id > 3,不過主表的數(shù)據(jù)仍然全部顯示出來了,但是影響了右邊表(關(guān)聯(lián)表)的顯示。
如果想要對主表進行篩選,應(yīng)該把條件寫在where后。
select * from a left join b on a.id = b.a_id where a.id > 3;
更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL查詢技巧大全》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲過程技巧大全》及《MySQL數(shù)據(jù)庫鎖相關(guān)技巧匯總》
希望本文所述對大家MySQL數(shù)據(jù)庫計有所幫助。
相關(guān)文章
mysql?8.0.27?安裝配置方法圖文教程(Windows64位)
這篇文章主要為大家詳細介紹了mysql?8.0.27?下載、安裝與配置圖文教程,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04linux系統(tǒng)ubuntu18.04安裝mysql 5.7
這篇文章主要為大家詳細介紹了linux系統(tǒng)ubuntu18.04安裝mysql 5.7,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-09-09SQL?SERVER數(shù)據(jù)庫服務(wù)器CPU不能全部利用原因解析
這篇文章主要介紹了SQL?SERVER數(shù)據(jù)庫服務(wù)器CPU不能全部利用原因解析,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-09-09使用navicat 8實現(xiàn)創(chuàng)建數(shù)據(jù)庫和導(dǎo)入數(shù)據(jù) 管理用戶與權(quán)限[圖文方法]
使用navicat8實現(xiàn)創(chuàng)建數(shù)據(jù)庫和導(dǎo)入數(shù)據(jù)的方法,需要的朋友可以參考下。2011-04-04mysql/Java服務(wù)端對emoji的支持與問題解決方法詳解
這篇文章主要介紹了mysql/Java服務(wù)端對emoji的支持與問題解決方法,結(jié)合實例形式分析了mysql/Java服務(wù)端對emoji字符集存儲及支持問題解決方法,需要的朋友可以參考下2019-10-10