欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于Mysql中ON與Where區(qū)別問題詳解

 更新時(shí)間:2022年02月18日 10:51:08   作者:啥時(shí)能掙6000塊  
在編寫SQL腳本中,多表連接查詢操作需要使用到on和where條件,但是經(jīng)常會(huì)混淆兩者的用法,從而造成取數(shù)錯(cuò)誤,下面這篇文章主要給大家介紹了關(guān)于Mysql中ON與Where區(qū)別問題的相關(guān)資料,需要的朋友可以參考下

今天工作的時(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)文章

  • 全面解析Windows下安裝 mysql5.7的方法

    全面解析Windows下安裝 mysql5.7的方法

    這篇文章主要介紹了全面解析Windows下安裝 mysql5.7的方法的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • 解決Windows10下mysql5.5數(shù)據(jù)庫命令行中文亂碼問題

    解決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-07
  • Mysql大型SQL文件快速恢復(fù)方案分享

    Mysql大型SQL文件快速恢復(fù)方案分享

    這篇文章主要給大家介紹了關(guān)于Mysql大型SQL文件快速恢復(fù)方案的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • MySQL 的 20+ 條最佳實(shí)踐

    MySQL 的 20+ 條最佳實(shí)踐

    數(shù)據(jù)庫操作是當(dāng)今 Web 應(yīng)用程序中的主要瓶頸。 不僅是 DBA(數(shù)據(jù)庫管理員)需要為各種性能問題操心,程序員為做出準(zhǔn)確的結(jié)構(gòu)化表,優(yōu)化查詢性能和編寫更優(yōu)代碼,也要費(fèi)盡心思。 在本文中,我列出了一些針對(duì)程序員的 MySQL 優(yōu)化技術(shù)
    2016-12-12
  • MSQL中DATETIME或TIMESTAMP的區(qū)別小結(jié)

    MSQL中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ò)問題

    這篇文章主要介紹了詳解Mysql數(shù)據(jù)庫date, datetime類型設(shè)置0000-00-00默認(rèn)值(default)報(bào)錯(cuò)問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • mysql創(chuàng)建用戶并賦予用戶權(quán)限詳細(xì)操作教程

    mysql創(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-12
  • mysql刪除重復(fù)行的實(shí)現(xiàn)方法

    mysql刪除重復(fù)行的實(shí)現(xiàn)方法

    這篇文章主要介紹了mysql刪除重復(fù)行的實(shí)現(xiàn)方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • Linux下mysql 8.0.15 安裝配置圖文教程以及修改密碼

    Linux下mysql 8.0.15 安裝配置圖文教程以及修改密碼

    這篇文章主要為大家詳細(xì)介紹了Linux下mysql 8.0.15安裝配置圖文教程以及修改密碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • mysql獲取group by總記錄行數(shù)的方法

    mysql獲取group by總記錄行數(shù)的方法

    這篇文章主要介紹了mysql獲取group by總記錄行數(shù)的方法,主要通過group by SQL_CALC_FOUND_ROWS語句來實(shí)現(xiàn)該功能,具有一定的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10

最新評(píng)論