數據庫on,where,having區別


on和where

所有的查詢都回產生一個中間臨時報表,查詢結果就是從返回臨時報表中得到。on和where后面所跟限制條件的區別,主要與限制條件起作用的時機有關,on根據限制條件對數據庫記錄進行過濾,然后生產臨時報表;而where是在臨時報表生產之后,根據限制條件從臨時報表中篩選結果。

總結:在左外連接中,on會返回左表中的所有記錄;而where中,此時相當於inner join,只會返回滿足條件的記錄。
速度:因為on限制條件發生時間較早,產生的臨時報表數據集要小,因此on的性能要優於where。

having和where

having和where的區別也是與限制條件起作用時機有關,having是在聚集函數計算結果出來之后篩選結果,查詢結果只返回符合條件的分組,having不能單獨出現,只能出現在group by子句中。而where是在計算之前篩選結果,如果聚集函數使用where,那么聚集函數只計算滿足where子句限制條件的數據。

總結:where即可以和select等其他子句搭配使用,也可以和group by子句搭配使用,where的優先級要高於having。
速度:因為where在聚集函數之前篩選數據,having在計算之后篩選分組,因此where的性能要優於having。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM