關(guān)于Mysql中ON與Where區(qū)別問題詳解
今天工作的時(shí)候編寫了一個(gè)SQL,大家一起來看一下
SELECT * FROM user user LEFT JOIN user_message msg ON user.id = msg.user_id AND user.name = '張三'
我們有一張user表
我們還有一張user_message表
我們執(zhí)行上面的SQL后,查詢結(jié)果如下
并不如我們所想的,只出現(xiàn)張三的結(jié)果,這是為什么呢?
經(jīng)過我的整理發(fā)現(xiàn)查詢是如下原因
關(guān)聯(lián)的時(shí)候ON條件是在合并兩張表形成臨時(shí)表前進(jìn)行的條件篩選,所以在使用 JOIN 關(guān)鍵字進(jìn)行關(guān)聯(lián)的時(shí)候,尤其是左關(guān)聯(lián)或右關(guān)聯(lián)的時(shí)候,不要使用 字段 = '定值' 這種篩選方式
在內(nèi)關(guān)聯(lián)(inner join)中,Mysql判斷 字段 = '定值' 如果為false,會(huì)被篩選掉,如果為true,則會(huì)正確顯示數(shù)據(jù)。
在左關(guān)聯(lián)(left join)中,Mysql判斷 字段 = '定值' 如果為false,會(huì)返回左表的數(shù)據(jù),如果為true,則會(huì)正確顯示顯示數(shù)據(jù)。
在右關(guān)聯(lián)(right join)中,Mysql判斷 字段 = '定值' 如果為false,會(huì)返回右表的數(shù)據(jù),如果為true,則會(huì)正確顯示顯示數(shù)據(jù)。
所以我上述的SQL會(huì)返回張三的全部數(shù)據(jù),除張三外的所有數(shù)據(jù)只會(huì)返回左表數(shù)據(jù),右表全部為null,無論是否可以匹配到。
where是在臨時(shí)表創(chuàng)建成功后,再次對(duì)臨時(shí)表進(jìn)行篩選的,所以此時(shí)我們可以對(duì)關(guān)聯(lián)后的數(shù)據(jù)隨意進(jìn)行篩選。
區(qū)別總結(jié):
先執(zhí)行on,后執(zhí)行where;on是建立關(guān)聯(lián)關(guān)系,where是對(duì)關(guān)聯(lián)關(guān)系的篩選。
比如兩個(gè)表進(jìn)行l(wèi)eft join連接查詢結(jié)果,where會(huì)對(duì)查詢的結(jié)果進(jìn)行過濾, on會(huì)返回驅(qū)動(dòng)表的所有數(shù)據(jù)。
left join按照條件關(guān)聯(lián),不管是否為真,都返回左邊表的數(shù)據(jù)。
總結(jié)
到此這篇關(guān)于關(guān)于Mysql中ON與Where區(qū)別問題的文章就介紹到這了,更多相關(guān)Mysql ON與Where區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決Windows10下mysql5.5數(shù)據(jù)庫命令行中文亂碼問題
重置系統(tǒng)后,很久之前安裝的MySQL數(shù)據(jù)庫出現(xiàn)了控制臺(tái)查詢中文亂碼問題,時(shí)間太久早已經(jīng)不記得怎么設(shè)置了。下面通過本文給大家分享Windows10下解決MySQL5.5數(shù)據(jù)庫命令行中文亂碼問題,一起看看吧2017-07-07MSQL中DATETIME或TIMESTAMP的區(qū)別小結(jié)
MySQL中的?DATETIME?和?TIMESTAMP?類型都用于存儲(chǔ)日期和時(shí)間信息,本文主要介紹了MSQL中DATETIME或TIMESTAMP的區(qū)別小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03詳解Mysql數(shù)據(jù)庫date, datetime類型設(shè)置0000-00-00默認(rèn)值(default)報(bào)錯(cuò)問題
這篇文章主要介紹了詳解Mysql數(shù)據(jù)庫date, datetime類型設(shè)置0000-00-00默認(rèn)值(default)報(bào)錯(cuò)問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01mysql創(chuàng)建用戶并賦予用戶權(quán)限詳細(xì)操作教程
這篇文章主要給大家介紹了關(guān)于mysql創(chuàng)建用戶并賦予用戶權(quán)限詳細(xì)操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12mysql刪除重復(fù)行的實(shí)現(xiàn)方法
這篇文章主要介紹了mysql刪除重復(fù)行的實(shí)現(xiàn)方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06Linux下mysql 8.0.15 安裝配置圖文教程以及修改密碼
這篇文章主要為大家詳細(xì)介紹了Linux下mysql 8.0.15安裝配置圖文教程以及修改密碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03