注意:查询中的执行步骤:先分组,在聚合,最后筛选。。。(where ,分组,集合函数,筛选)
1.用的地方不一样
where可以用于select、update、delete和insert...into语句中。
having只能用于select语句中
2.执行的顺序不一样
where的搜索条件是在执行语句进行分组之前应用
having的搜索条件是在分组条件后执行的
即如果where和having一起用时,where会先执行,having后执行
3.子句有区别
where子句中的条件表达式having都可以跟,而having子句中的有些表达式where不可以跟;having子句可以用集合函数(sum、count、avg、max和min),而where子句不可以。
有些地方两者都可以用,比如
select studentid, avg(score)
select studentid, avg(score)
from studentScore
group by studentid
having left(studentid, 1)='0'
select studentid, avg(score)
select studentid, avg(score)
from studentScore
where left(studentid, 1)='0'
group by studentid
这种情况下哪个会快一点
解析:
select studentid, avg(score) from studentScore group by studentid having left(studentid, 1)='0'
1、分组汇总
2、过滤非法项
left(studentid, 1)='0'是个效率不很高的过滤条件,如果分组会使数据量极大减少(比如每个人有几十门课),而且要过滤掉的只是很小一部分学生,这种写法会有比较高的效率
select studentid, avg(score) from studentScore where left(studentid, 1)='0' group by studentid
1、过滤非法项
2、分组汇总
虽然left(studentid, 1)='0'是个效率不很高的过滤条件,但是如果你要从几百万学生中找到几十个学生3-5门功课的平均分,还是应该很明智的选择它
这种情况下哪个会快一点
解析:
select studentid, avg(score) from studentScore group by studentid having left(studentid, 1)='0'
1、分组汇总
2、过滤非法项
left(studentid, 1)='0'是个效率不很高的过滤条件,如果分组会使数据量极大减少(比如每个人有几十门课),而且要过滤掉的只是很小一部分学生,这种写法会有比较高的效率
select studentid, avg(score) from studentScore where left(studentid, 1)='0' group by studentid
1、过滤非法项
2、分组汇总
虽然left(studentid, 1)='0'是个效率不很高的过滤条件,但是如果你要从几百万学生中找到几十个学生3-5门功课的平均分,还是应该很明智的选择它
相关推荐
### 基于TP框架SQL之where与having区别的详细解析 #### 一、Where与Having的区别 在SQL查询语句中,`WHERE`和`HAVING`子句都用于过滤查询结果,但它们的应用场景有所不同。 - **WHERE子句**: - 作用:在对查询...
### SQL中的WHERE与HAVING的区别 在SQL查询语句中,`WHERE`子句和`HAVING`子句都是用于过滤数据的,但它们的作用范围和使用场景有所不同。理解这两个子句之间的区别对于编写高效、准确的SQL查询非常重要。 #### ...
3. `WHERE`不能与聚合函数一起直接使用,而`HAVING`专门处理聚合函数的结果; 4. 不能用`WHERE`替换`HAVING`来过滤分组后的数据,反之亦然。 理解这两个子句的不同用途可以帮助你编写出更精确和高效的SQL查询,特别...
### Oracle SQL 中 WHERE 和 HAVING 的区别 ...通过以上的详细解释,我们不仅了解了`WHERE`与`HAVING`的基本用法和区别,还深入探讨了它们在实际应用中的具体表现形式。这对于掌握Oracle SQL语言的基础知识非常有帮助。
总结来说,`WHERE`子句和`HAVING`子句在SQL查询中的主要区别在于: 1. `WHERE`作用于数据分组前,适用于单行数据的筛选。 2. `HAVING`作用于数据分组后,适用于对分组后的数据进行筛选。 3. `WHERE`不支持聚合函数,...
T-SQL 中 where 子句与 having 子句的对比分析 T-SQL 中的 SELECT 语句是数据库应用最广泛和最重要的语句之一。在 SELECT 语句中,WHERE 子句和 HAVING 子句都是用来对数据进行筛选的,但是它们之间存在着一些区别...
WHERE子句和HAVING子句的主要区别在于它们处理数据的时机和方式。WHERE在数据被分组前进行过滤,而HAVING则在数据分组后对聚合结果进行过滤。WHERE适用于单行记录级别的筛选,而HAVING则适用于多行数据的汇总筛选。 ...
总结来说,`WHERE`和`HAVING`的主要区别在于: 1. `WHERE`在`GROUP BY`之前应用,用于对原始数据进行筛选,不支持聚合函数。 2. `HAVING`在`GROUP BY`之后应用,用于对分组后的数据进行筛选,支持聚合函数。 理解这...
两者的区别在于,`WHERE`子句作用于单行数据,而`HAVING`子句作用于聚合后的数据组。在实际使用中,`WHERE`子句通常用于对原始数据进行初步筛选,`HAVING`子句则用于对经过聚合操作的数据进行二次筛选。 另外,理解...
3. **与聚合函数的关系**:`WHERE`不能直接与聚合函数一起使用,而`HAVING`必须与聚合函数一起使用。 在实际使用中,合理选择`WHERE`和`HAVING`可以帮助优化查询性能,避免不必要的计算,并确保获取到正确的查询...
数据库查询语句执行顺序与编写顺序详解 数据库查询语句的执行顺序和编写顺序是数据库开发中非常重要的知识点。特别是在WHERE、GROUP BY、HAVING、ORDER BY同时出现时,执行顺序和编写顺序变得尤为重要。本文将详细...
“Having”是一个过滤声明,所谓过滤是在查询数据库的结果返回之后进行过滤,即在结果返回之后起作用,并且having后面可以使用“聚合函数”。 2.使用的角度: where后面之所以不能使用聚合函数是因为where的执行顺序...
`WHERE`和`HAVING`都是用来设置查询条件,但它们的使用时机不同。`WHERE`子句通常在`GROUP BY`之前使用,用于在数据分组之前筛选出满足条件的行。例如,如果我们只想看分数为60或80的学生: ```sql SELECT gender, ...
总之,`HAVING`子句是SQL中用于处理分组数据过滤的关键工具,它与`WHERE`子句协同工作,共同帮助我们获取满足特定需求的数据集。在编写复杂的SQL查询时,正确理解和使用这两个子句是非常重要的。
注意以下几点关于`WHERE`和`HAVING`的区别和使用注意事项: 1. **执行顺序**:`WHERE` 在 `GROUP BY` 之前执行,作用于单行;`HAVING` 在 `GROUP BY` 之后执行,作用于分组。 2. **聚合函数**:`WHERE` 不支持聚合...
#### 二、HAVING 子句与 WHERE 子句的区别 - **WHERE 子句**:用于在数据分组之前对数据进行过滤,它只能包含非聚合表达式。 - **GROUP BY 子句**:用于根据一个或多个列将结果集分组。 - **HAVING 子句**:用于在...
在SQL查询中,`HAVING`和`WHERE`子句都是用来过滤数据的,但它们在功能和使用场景上有着显著的区别。`WHERE`子句主要用于在数据分组和聚合运算之前筛选行,而`HAVING`子句则在数据已经经过分组和聚合之后进行筛选。 ...
在SQL查询中,`WHERE`和`HAVING`都是用于过滤数据,但它们的作用范围和时机有所不同。`WHERE`子句主要用于在数据聚合之前筛选行,而`HAVING`子句则在数据聚合之后用于进一步筛选由`GROUP BY`生成的组。 1. **WHERE...
这点与 WHERE 子句不同,WHERE 子句可以对单个记录进行筛选。 其次,HAVING 子句条件中只能涉及常量、聚组函数或 GROUP BY 子句中的列。这意味着,HAVING 子句不能用于对其他列进行筛选,否则将会出现错误。 最后...