用來過濾數據的
-- 若過濾條件中使用了聚合函數,則必須使用having來替換where 否則會出錯
-- 使用到group by才能使用having, 且having一定要寫在group by的後面
select emp_id, name
, branch_id, salary
from employee
where branch_id in (
select branch_id
from employee
group by branch_id
having avg(salary) < 50000
);
上面把同部門的平均薪資算出來小於五萬的輸出
where / having
where可以直接使用表中的字段作為篩選條件。但不能使用聚合函數作為篩選條件。Having必須要與group by配合使用,但他的條件可以是聚合函數或者一般的描述。
where是先篩選後連接 having則相反 這決定了where更高效 where能做到的不要使用having 否則效率會降低 也算是優化的一種(?)