技术文摘
SQL 里 where 与 having 的差异
SQL里where与having的差异
在SQL的学习与使用过程中,where和having是两个非常重要的关键字,它们在数据筛选方面发挥着关键作用,但又存在诸多差异。深入理解这些差异,能帮助开发者更高效地编写SQL查询语句,提升数据处理能力。
where子句主要用于对表中的行进行筛选,它作用于单个行。在查询执行过程中,where会在分组操作之前对数据进行过滤。例如,在一个存储员工信息的表中,若要查询工资大于5000的员工,SQL语句可以写成:SELECT * FROM employees WHERE salary > 500;。这里,where直接从employees表的每一行数据中筛选出满足工资大于500条件的行。它只能使用表中的列名以及常量进行条件判断,不能使用聚合函数。因为聚合函数是在分组之后对一组数据进行计算的,而where执行时还未进行分组操作。
having子句则主要用于对分组后的结果进行筛选,它作用于分组。当数据经过分组(使用group by子句)后,having会对这些分组进行过滤。例如,还是在员工信息表中,按照部门进行分组,要查询平均工资大于8000的部门,SQL语句为:SELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 8000;。这里先通过group by将员工按部门分组,然后使用having对分组后的结果进行筛选,只返回平均工资大于8000的部门。having可以使用聚合函数,因为它是在分组和聚合计算完成之后才执行的。
另外,where的执行效率通常比having高,因为where在数据量较大时,提前对单个行进行筛选,减少了参与后续分组和计算的数据量。而having是在分组和聚合操作完成后才进行筛选,处理的数据量相对较大。
where和having在SQL中各司其职。合理运用where和having,能让我们在处理数据时更加得心应手,确保查询结果准确且高效。
- Java12 的全新特性阐释
- VR 交互为何不一定要追求“准确性”
- 面试官:Spring MVC 处理流程如何?
- 通过 requests 访问 Python 包索引(PyPI)的 JSON API
- 11 个微型前端框架,你应当知晓
- 11 个微前端的误解解析
- PyPy 使 Python 快过 C 的内在机制解析
- 4 月 Github 热门 JavaScript 开源项目
- 4 月 Github 热门 Java 开源项目
- 5 个步骤实现随机 React 应用程序到微前端的转换
- Python 中游戏开发模块 pyglet 全解析
- 4 月 Github 热门 Python 开源项目排名
- 细数以 Nodejs 作后端的大型公司
- JDK 新特性之 Lambda 表达式的神奇运用
- 2021 年开发人员必知的 8 大编程技能