①WHERE 是对数据集进行筛选
②GROUP BY 是分组查询,是对结果集进行分组, 一般 GROUP BY 是和聚合函数配合使用:
GROUP BY 有一个原则,就是 SELECT后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面(重要),如下:
SELECT column_A,column_B,SUM(column_C) FROM Orders GROUP BY column_A,column_B;
③HAVING 用于对分组后的结果进行筛选.(即HAVING的前提是分组)
④ORDER BY 是对结果集进行排序
详解:
1.WHERE 必须在GROUP BY 之前
2.GROUP BY 必须在HAVING 之前.
3.HAVING只能用在GROUP BY 之后,对分组后的结果进行筛选.(即使用HAVING 的前提是分组)
举例:
当一个查询语句同时出现了WHERE ,GROUP BY, HAVING ,ORDER BY 时,执行顺序和编写顺序是select--from--where--group--having--select--order by:
1.执行WHERE子句对全表数据做筛选,返回第一个结果集
2.针对第一个结果集使用GROUP BY分组,返回第二个结果集
3.针对第二个结果集使用HAVING进行筛选,返回第三个结果集
4.针对第三个结果集中的每1组数据执行SELECT XX,有几组就执行几次,返回第四个结果集
5.对第四个结果集使用OEDER BY进行排序
WHERE 与 HAVING 的区别:
WHERE子句中不能使用分组函数(!!!)
可以在HAVING子句中使用分组函数
WHERE的执行顺序在HAVING之前,因为WHERE子句在GROUP BY子句之前,HAVING 子句在GROUP BY 之后
HAVING 子句是对分组结果进行筛选,所以使用HAVING的前提是使用了GROUP BY