天天看點

where、having和on的差別where、having和on的差別

where、having和on的差別

having 與where 子句類似,均用于設定限定條件,where子句的作用是在對查詢結果前,将不符合where條件的行去掉,條件中不能包含聚合函數,使用where條件顯示特定的行。

having子句作用是篩選滿足條件的組,限制傳回的結果集,即在分組之後過濾資料,條件中經常包含聚合函數,使用having 條件顯示特定的組,也可以使用多個分組标準進行分組。

例如:

select deptno,sum(sal) from emp 
       where sal> 
       group by deptno 
       having sum(sal)> 
       order by deptno
           

在使用left jion時,on和where條件的差別如下:

1、 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會傳回左邊表中的記錄。

2、where條件是在臨時表生成好後,再對臨時表進行過濾的條件。這時已經沒有left join的含義(必須傳回左邊表的記錄)了,條件不為真的就全部過濾掉。

參考資料1:Oracle中group by用法

參考資料2:left join on 和where條件的放置