当前位置: 首页 > 图灵资讯 > 技术篇> SQL having与where用法区别

SQL having与where用法区别

来源:图灵教育
时间:2023-06-06 09:26:14

从来没有总结过whereer、having的用法差异总是模糊不清,今天就总结一下!

先举个例子:

SQL having与where用法区别_聚合函数

要求:查询平均分60分以上的学生学号和平均分;

SQL语句错误:

SELECT sid FROM sc WHERE AVG(score) > 正确的SQL语句:SELECT sid,AVG(score) FROM sc GROUP BY sid HAVING AVG(score) >60;查询结果如下:

SQL having与where用法区别_聚合函数_02

在这里,我犯了where和having用法的错误

用法区别:

where和having用于筛选having用于筛选组,where用于筛选记录。一般来说,where搜索条件应用于分组操作前,having搜索条件应用于分组操作后的查询,包括where条件和聚合函数。如:SELECT SUM(score) FROM sc WHERE score > 先过滤score>记录60,然后在聚合后过滤SUM求和having。having将用于分组过滤分组结果,通常包含聚合函数,如:SELECT sid,AVG(score) FROM sc GROUP BY sid HAVING AVG(score) >60;如果having包含多个条件,这些条件将通过AND、OR或NOT连接在一起,如:SELECT sid,cid,AVG(score) FROM sc GROUP BY sid HAVING AVG(score) >60 AND cid != '001' ; 如右图所示:

SQL having与where用法区别_聚合函数_03

正确理解where、group by、having字句的正确顺序对编写高效的查询代码非常有帮助,在where中指定可以分组操作前后的搜索条件会更有效,这样就可以了 减少必须分组的行数, 应当在 having子句中指定的搜索条件只是执行分组操作后必须应用的搜索条件。Microsoft SQL Server 2005 这些条件中的大多数条件都可以通过查询优化器来处理。如果确定了查询优化器 having 可在分组操作前应用搜索条件,然后在分组前应用搜索条件。查询优化器可能无法识别所有可以在分组操作前使用的信息 HAVING 搜索条件。建议将所有这些搜索条件放在首位 WHERE 而不是在句子中 HAVING 子句中。

额外补充:group by用于分组,order by用于排序

上一篇:

Rabbitmq指标名称

下一篇:

C# 异步锁