?ON 、WHERE、HAVING都能通過限制條件篩選數(shù)據(jù),但他們的使用及其不同。下面我們來分析三者之間的區(qū)別。
1.?????? ON 和WHERE
??????? 所有的查詢都回產(chǎn)生一個中間臨時報表,查詢結(jié)果就是從返回臨時報表中得到。ON和WHERE后面所跟限制條件的區(qū)別,主要與限制條件起作用的時機(jī)有關(guān),ON根據(jù)限制條件對數(shù)據(jù)庫記錄進(jìn)行過濾,然后生產(chǎn)臨時表;而WHERE是在臨時表生產(chǎn)之后,根據(jù)限制條件從臨時表中篩選結(jié)果。
???????????因為以上原因,ON和WHERE的區(qū)別主要有下:
1)? 返回結(jié)果:在左外(右外)連接中,ON會返回左表(右表)中的所有記錄;而WHERE中,此時相當(dāng)于inner join,只會返回滿足條件的記錄(因為是從臨時表中篩選,會過濾掉不滿足條件的)。
2)? 速度:因為ON限制條件發(fā)生時間較早,臨時表的數(shù)據(jù)集要小,因此ON的性能要優(yōu)于WHERE。
2.?????? HAVING和WHERE
????????? HAVING和WHERE的區(qū)別也是與限制條件起作用時機(jī)有關(guān),HAVING是在聚集函數(shù)計算結(jié)果出來之后篩選結(jié)果,查詢結(jié)果只返回符合條件的分組,HAVING不能單獨出現(xiàn),只能出現(xiàn)在GROUP BY子句中。;而WHERE是在計算之前篩選結(jié)果,如果聚集函數(shù)使用WHERE,那么聚集函數(shù)只計算滿足WHERE子句限制條件的數(shù)據(jù),例如:
- SELECT? COUNT(id)? FROM?db_equip? WHERE?tb_equip_type?=?‘2’;??
???????????Count計算的結(jié)果是首先篩選設(shè)備類型為2的的設(shè)備,然后統(tǒng)計設(shè)備類型為2類型的數(shù)量。
?????? 在使用和功能上,HAVING和WHERE有以下區(qū)別:
1)??HAVING不能單獨出現(xiàn),只能出現(xiàn)在GROUP BY子句之中;WHERE即可以和SELECT等其他子句搭配使用,也可以和GROUP BY子句搭配使用,WHERE的優(yōu)先級要高于聚合函數(shù)高于HAVING。
2)? 因為WHERE在聚集函數(shù)之前篩選數(shù)據(jù),HAVING在計算之后篩選分組,因此WHERE的查詢速度要比HAVING的查詢速度快。
3.?????? 總結(jié)
??????? ON、WHERE、HAVING的主要差別是其子句中限制條件起作用時機(jī)引起的,ON是在生產(chǎn)臨時表之前根據(jù)條件篩選記錄,WHERE是從生產(chǎn)的臨時表中篩選數(shù)據(jù),而HAVING是對臨時表中滿足條件的數(shù)據(jù),進(jìn)行計算分組之后,通過HAVING限制語句篩選分組,返回結(jié)果是滿足HAVING子句限制的分組。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
