SQL语句的执行过程一般是:from-->where-->group by -->having --> select--- >order by。
在SQL中,Where和Having都是用于过滤查询结果的关键字,但它们的使用场景和适用对象有所不同。
1.WHERE关键字用于在查询过程中过滤数据,它是基于表中的列值进行过滤。 WHERE 子句在分组 GROUP BY 之前执行,因此它不能直接引用聚合函数(如COUNT()、SUM()等等)。
例如,假设我们有一个名为 “employees”的表,包含以下列:id、name和salary。如果我们想要查询年龄大于30的员工,可以使用以下查询:
select * FROM employees
where age > 30;
2.HAVING关键字用于在分组后过滤数据,它通常与聚合函数一起使用。HAVING子句在分组GROUP BY 之后执行,因此它可以引用聚合函数。
例如,如果我们想要查询平均工资大于10000的部门,可以使用以下查询:
select department, AVG(salary) as avg_salary
from employees
group by department
having avg_salary > 50000;
总结一下,WHERE 用于在分组前过滤数据,不能直接引用聚合函数,而 HAVING 用于在分组后过滤数据,可以直接引用聚合函数。