1. 程式人生 > 其它 >MySql--where&having

MySql--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子句可以讓我們篩選成組後的各組資料.