SQL中where與having的區別
阿新 • • 發佈:2018-11-28
導讀
1.where和having的區別 2.聚合函式和group by 3.where 和having的執行順序 4.where不能使用聚合函式、having中可以使用聚合函式 1.where和having的區別 where:- where是一個約束宣告,使用where來約束來自資料庫的資料;
- where是在結果返回之前起作用的;
- where中不能使用聚合函式。
- having是一個過濾宣告;
- 在查詢返回結果集以後,對查詢結果進行的過濾操作;
- 在having
#如:
SELECT SUM(population),region FROM T01_Beijing GROUP BY region; //計算北京每個分割槽的人數
3.where和having的執行順序
- where 早於 group by 早於 having
- where子句在聚合前先篩選記錄,也就是說作用在group by 子句和having
#篩選出北京西城、東城、海淀及各區學校數量
SELECT region,count(school)
FROM T02_Bejing_school
WHERE region IN ('海淀' , '西城' , '東城') GROUP BY region;
注意!我們不能用where來篩選超過學校數量超過10的區,因為表中不存在這樣一條記錄。 而HAVING子句可以讓我們篩選成組後的各組資料.#篩選出北京西城、東城、海淀三個區中學校數量超過10所的區及各區學校數量。 SELECT region,count(school) FROM T02_Bejing_school WHERE region IN ('海淀' , '西城' , '東城') GROUP BY region HAVING count(school) > 10;