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

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