SQL 中having 和where的区别分析
在数据库查询中,`SELECT`语句的`GROUP BY`子句是一个强大的工具,它可以将数据行按照指定的列进行分组,进而生成每个组的汇总信息。为了使结果更为精炼,我们可以使用聚组函数来汇总每个组的数据。而`HAVING`子句则用于进一步筛选已经分组后的数据,确保只有满足特定条件的组被返回。
想象一下,我们正在处理一个庞大的数据库,如Oracle,其中包含大量的员工信息。我们想要知道每个部门的员工工资总和,这可以通过使用`GROUP BY`子句根据部门编号(`deptno`)进行分组,并使用聚组函数`SUM(sal)`计算每个部门的工资总和。如果我们只想看到工资总和超过某个值的部门,就需要用到`HAVING`子句来过滤这些分组后的结果。
让我们来看一个具体的例子:
```sql
SELECT deptno, SUM(sal)
FROM emp
WHERE sal > 1200
GROUP BY deptno
HAVING SUM(sal) > 8500
ORDER BY deptno;
```
在这个查询中,首先通过`WHERE`子句过滤掉工资低于1200的员工。接着,使用`GROUP BY`子句根据部门编号进行分组并计算每个部门的工资总和。然后,`HAVING`子句确保只有工资总和超过8500的部门被返回。通过`ORDER BY`子句按照部门编号排序结果。
你可能会问,何时应该使用`WHERE`,何时应该使用`HAVING`?简单来说,`WHERE`子句在`GROUP BY`之前运行,用于在分组之前过滤数据。而`HAVING`子句则在`GROUP BY`之后运行,用于过滤已经分组的组。值得注意的是,由于`HAVING`用于筛选分组后的数据,所以它的条件中经常包含聚组函数。
如果你想要查询每个部门的每种职位的雇员数,可以这样写:
```sql
SELECT deptno, job, COUNT()
FROM emp
GROUP BY deptno, job;
```
这个查询将根据部门和职位对员工信息进行分组,并使用`COUNT()`函数计算每个组中的员工数量。
深入理解`GROUP BY`和`HAVING`的功能和使用场景,可以帮助你更有效地从数据库中获取所需的信息。希望这篇文章能够帮助你更好地掌握这两个强大的数据库查询工具。
编程语言
- SQL 中having 和where的区别分析
- asp程序错误详细说明例表
- 跨服务器查询导入数据的sql语句
- php找出指定范围内回文数且平方根也是回文数的
- Angular学习笔记之angular的$filter服务浅析
- 2019年前端必用js正则(小结)
- vue2+el-menu实现路由跳转及当前项的设置方法实例
- javascript无刷新评论实现方法
- javascript实现连续赋值
- Echarts之悬浮框中的数据排序问题
- HTML服务器控件和WEB服务器控件的区别和联系介绍
- jQuery实现点击关注和取消功能
- JavaScript使用ZeroClipboard操作剪切板
- php和editplus正则表达式去除空白行
- destoon二次开发入门示例
- ASP的Server.MapPath()不同参数返回路径总结