group by子句将查询结果按某一列或多列的值分组,值相等的为一组。
对查询结果分组的目的是为了细化聚集函数的作用对象。如果未对查询结果分组,聚集函数将作用于整个查询结果。分组后聚集函数将作用于每一个组、即每一组都有一个函数值。
如:
查询课程号以及相应的选课人数:select cno, count(*) from sc group by cno;
该语句对查询结果按cno的值分组,所有具有相同cno值的元组为一组,然后对每一组作用聚集函数count计算,以求得改组的学生人数。
查询结果可能为:
cno count(*)
1 22
2 34
3 8
4 43
5 20
如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用having短语指定筛选条件。
如:
查询选修了3门以上课程的学生学号:select sno from sc group by sno having count(*) > 3;
这里先用group by子句按sno进行分组,再用聚集函数count对每一组计数。having短语给出了选择组的条件,只有满足条件的组才会被选出来。
注:where子句与having短语的区别在于作用对象不同。where子句作用于基础表或视图,从中选择满足条件的元组,而由于聚集函数是对选择之后的目标行进行计算的,所以where子句不能包含聚集函数;having短语作用于组,从中选择满足条件的组。
where子句在group by语句之前;sql会在分组之前计算where子句。
having子句在group by语句之后;sql会在分组之后计算having子句。
相关推荐
### 基于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 子句不能用于对其他列进行筛选,否则将会出现错误。 最后...