關(guān)于Mysql中ON與Where區(qū)別問(wèn)題詳解
今天工作的時(shí)候編寫了一個(gè)SQL,大家一起來(lái)看一下
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)過(guò)我的整理發(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,無(wú)論是否可以匹配到。
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)行過(guò)濾, on會(huì)返回驅(qū)動(dòng)表的所有數(shù)據(jù)。
left join按照條件關(guān)聯(lián),不管是否為真,都返回左邊表的數(shù)據(jù)。
總結(jié)
到此這篇關(guān)于關(guān)于Mysql中ON與Where區(qū)別問(wèn)題的文章就介紹到這了,更多相關(guān)Mysql ON與Where區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Oracle和MySQL中生成32位uuid的方法舉例(國(guó)產(chǎn)達(dá)夢(mèng)同Oracle)
近日遇到朋友問(wèn)及如何生成UUID,UUID是通用唯一識(shí)別碼(Universally Unique Identifier)方法,這里給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于Oracle和MySQL中生成32位uuid的方法,需要的朋友可以參考下2023-08-08
MySQL進(jìn)行大數(shù)據(jù)量分頁(yè)的優(yōu)化技巧分享
mysql大數(shù)據(jù)量分頁(yè)情況下性能會(huì)很差,所以本文就來(lái)講一講mysql大數(shù)據(jù)量下偏移量很大,性能很差的問(wèn)題,并附上解決方式,希望對(duì)大家有所幫助2024-01-01
Mysql賬號(hào)管理與引擎相關(guān)功能實(shí)現(xiàn)流程
Mysql中的每一種技術(shù)都使用不同的存儲(chǔ)機(jī)制、索引技巧、鎖定水平、并且最終提供廣泛的不同功能和能力。通過(guò)選擇不同的技術(shù),你能夠獲得額外的速度或者功能,從而改善應(yīng)用的整體功能。這些不同的技術(shù)以及配套的相關(guān)功能在MySQL中被稱作存儲(chǔ)引擎2022-10-10

