MySQL查詢條件中放置on和where的區(qū)別分析
導(dǎo)語(yǔ)
今天在寫(xiě) SQL 的時(shí)候,遇到一個(gè)問(wèn)題。需求是這樣的,查詢數(shù)據(jù),按照評(píng)分倒序、近一周訪問(wèn)量倒序,這樣進(jìn)行排序。問(wèn)題是常規(guī)的寫(xiě)法,將 day >= xxx 條件放到 where 中, 如果某些數(shù)據(jù)近一周沒(méi)有訪問(wèn)量,那么這條數(shù)據(jù)就查不出來(lái)。解決辦法呢,就是將條件放到 LEFT JOIN 中。
MySQL 語(yǔ)句執(zhí)行順序
首先先說(shuō)明一個(gè)概念,MySQL 語(yǔ)句執(zhí)行的順序,并不是按照 SQL 語(yǔ)句的順序。下面是示例 SQL
SELECT DISTINCT < select_list > FROM < left_table > < join_type > JOIN < right_table > ON < join_condition > WHERE < where_condition > GROUP BY < group_by_list > HAVING < having_condition > ORDER BY < order_by_condition > LIMIT < limit_number >
下面是 SQL 的執(zhí)行順序
FROM <left_table> ON <join_condition> <join_type> JOIN <right_table> WHERE <where_condition> GROUP BY <group_by_list> HAVING <having_condition> SELECT DISTINCT <select_list> ORDER BY <order_by_condition> LIMIT <limit_number>
LEFT JOIN 的作用
結(jié)果集的不同,不僅與 SQL 的優(yōu)先級(jí)有關(guān),還和 LEFT JOIN 有關(guān)
使用left join時(shí)on后面的條件只對(duì)右表有效
- on是在生成臨時(shí)表的時(shí)候使用的條件,不管on的條件是否起到作用,都會(huì)返回左表 (table_name1) 的行。
- where則是在生成臨時(shí)表之后使用的條件,此時(shí)已經(jīng)不管是否使用了left join了,只要條件不為真的行,全部過(guò)濾掉。
以上是從兩篇資料中摘抄的,可以很好的概括(原文鏈接在下方,其中都有示例)。
參考資料:
- 步步深入:MySQL架構(gòu)總覽->查詢執(zhí)行流程->SQL解析順序
- MySQL left join操作中 on與where放置條件的區(qū)別
- SQL中過(guò)濾條件放在on和where中的區(qū)別。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
SQL語(yǔ)句單引號(hào)與雙引號(hào)的使用方法
這篇文章主要介紹了SQL語(yǔ)句中單引號(hào)、雙引號(hào)的使用方法,分別講述,雖然說(shuō)的是Insert語(yǔ)句,?但是Select、Update、Delete語(yǔ)句都是一樣的,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-03-03MySQL數(shù)據(jù)庫(kù)終端—常用操作指令代碼
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)終端—常用操作指令代碼,添加用戶、更改用戶名和host主機(jī)、更改密碼、刪除用戶等等,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-01-01MySQL無(wú)法啟動(dòng)幾種常見(jiàn)問(wèn)題小結(jié)
在群里看到有新同學(xué)還在問(wèn)MySQL無(wú)法啟動(dòng)的問(wèn)題,于是總結(jié)了幾個(gè)常見(jiàn)情況與解決方法,需要的朋友可以參考下2013-09-09Mysql子查詢關(guān)鍵字的使用方式(exists)
這篇文章主要介紹了Mysql子查詢關(guān)鍵字的使用方式(exists),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07mysql數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)點(diǎn)與操作小結(jié)
這篇文章主要介紹了mysql數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)點(diǎn)與操作,總結(jié)分析了mysql數(shù)據(jù)庫(kù)修改數(shù)據(jù)表、增刪改查及數(shù)據(jù)庫(kù)函數(shù)基本功能,需要的朋友可以參考下2020-01-01MySQL中JSON_ARRAYAGG和JSON_OBJECT函數(shù)功能和用法
JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,它可以用來(lái)存儲(chǔ)和表示結(jié)構(gòu)化的數(shù)據(jù),在MySQL數(shù)據(jù)庫(kù)中,JSON格式的數(shù)據(jù)處理已經(jīng)變得越來(lái)越常見(jiàn),本文將深入探討這兩個(gè)函數(shù)的用途、語(yǔ)法和示例,以幫助您更好地理解它們的功能和用法,需要的朋友可以參考下2023-09-09