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

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