結(jié)論:On > Where > 聚合函數(shù) > Having
On
用于表關(guān)聯(lián)(left join,right join ...),生成臨時表時的過濾條件,On條件生效后生成臨時表,但主表記錄不會被過濾,沒有匹配條件的主表記錄的對應(yīng)列都會顯示null而已。
Where
表關(guān)聯(lián)情況下,On條件生效后生成臨時表,這時如果有Where條件,會根據(jù)該條件過濾臨時表的所有記錄,此時無論是主表還是join表都會根據(jù)條件進(jìn)行過濾。
Having
因為Having執(zhí)行時機(jī)在最后,所以可以把聚合函數(shù)當(dāng)做條件進(jìn)行過濾。
使用
- On條件用于表關(guān)聯(lián),生效最快,但仍然會返回主表所有記錄,其次是Where條件生效,可以篩選出想要的結(jié)果數(shù)據(jù),如果有統(tǒng)計等聚合函數(shù),Having會在最后生效。
- 如果非表關(guān)聯(lián)查詢,那么On則無法使用,如果涉及到的過濾條件也沒有涉及到計算統(tǒng)計后的字段,那么此時Having和Where的作用是一樣的,但是Where的效率較高。