1. 程式人生 > >SQL中where與having的區別

SQL中where與having的區別

導讀

1.where和having的區別 2.聚合函式和group by 3.where 和having的執行順序 4.where不能使用聚合函式、having中可以使用聚合函式

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