mysql中l(wèi)eft join設(shè)置條件在on與where時(shí)的用法區(qū)別分析
本文實(shí)例講述了mysql中l(wèi)eft join設(shè)置條件在on與where時(shí)的用法區(qū)別。分享給大家供大家參考,具體如下:
一、首先我們準(zhǔn)備兩張表來進(jìn)行測(cè)試。
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;
兩個(gè)表的數(shù)據(jù)如圖所示:

運(yùn)行下面左連接查詢:
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;

上面的兩條語句,條件我們?cè)O(shè)置的是一樣的都是b.id > 3,為什么顯示結(jié)果不同。
sql語句查詢的關(guān)鍵字順序一般為 from > where > group by > having > order by
left join 在 from范圍,on 條件會(huì)先對(duì) left join 的右表進(jìn)行篩選,篩選完后的結(jié)果 where 再進(jìn)行篩選。
多個(gè) left join 會(huì)生成一張臨時(shí)表,on 條件是對(duì) left join 右表進(jìn)行條件過濾,where 條件針對(duì)最后生成的臨時(shí)表進(jìn)行過濾。
所以:
b.id > 3 的條件如果寫在 on 后面,則是先對(duì)右邊表(關(guān)聯(lián)表)進(jìn)行篩選,得出符合條件的行,然后主表 left join ,返回主表所有的行,右邊表沒匹配上的用 null 表示。
b.id > 3 的條件如果寫在 where 后面,則是先主表 left join 右邊表(關(guān)聯(lián)表),返回所有的行,然后 where 條件再對(duì)結(jié)果進(jìn)行篩選。
注意:on 后面的條件是針對(duì)右邊的表(關(guān)聯(lián)表),對(duì)主表沒什么作用。
select * from a left join b on a.id = b.a_id and a.id > 3;

我們?cè)趏n 后面添加了對(duì)主表的條件 a.id > 3,不過主表的數(shù)據(jù)仍然全部顯示出來了,但是影響了右邊表(關(guān)聯(lián)表)的顯示。
如果想要對(duì)主表進(jì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存儲(chǔ)過程技巧大全》及《MySQL數(shù)據(jù)庫鎖相關(guān)技巧匯總》
希望本文所述對(duì)大家MySQL數(shù)據(jù)庫計(jì)有所幫助。
相關(guān)文章
MySql分組后隨機(jī)獲取每組一條數(shù)據(jù)的操作
這篇文章主要介紹了MySql分組后隨機(jī)獲取每組一條數(shù)據(jù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10
MySQL 重裝MySQL后, mysql服務(wù)無法啟動(dòng)
把mysql程序卸載后, 重裝, 結(jié)果mysql服務(wù)啟動(dòng)不了,碰到這個(gè)問題的朋友可以參考下。2011-08-08
Win10環(huán)境下安裝Mysql5.7.23問題及遇到的坑
這篇文章主要介紹了Win10環(huán)境下安裝Mysql5.7.23問題及遇到的坑,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
Mysql技術(shù)內(nèi)幕之InnoDB鎖的深入講解
這篇文章主要給大家介紹了關(guān)于Mysql技術(shù)內(nèi)幕之InnoDB鎖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
mysql下優(yōu)化表和修復(fù)表命令使用說明(REPAIR TABLE和OPTIMIZE TABLE)
隨著mysql的長(zhǎng)期使用,肯定會(huì)出現(xiàn)一些問題,一般情況下mysql表無法訪問,就可以修復(fù)表了,優(yōu)化時(shí)減少磁盤占用空間。方便備份。2011-01-01

