SQL中where和group by可以连用吗?having算是对检索条件的补充吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中where和group by可以连用吗?having算是对检索条件的补充吗?相关的知识,希望对你有一定的参考价值。
where 可以和 group by连用 但效果和having是不同的 。
一、group by all语法解析:
- 如果使用 ALL 关键字,那么查询结果将包括由 GROUP BY 子句产生的所有组,即使某些组没有符合搜索条件的行。
没有 ALL 关键字,包含 GROUP BY 子句的 SELECT 语句将不显示没有符合条件的行的组。
select DepartmentID,DepartmentName as '部门名称',COUNT(*) as '个数' from BasicDepartment group by all DepartmentID,DepartmentName。
二、group by 和having 解释:前提必须了解sql语言中一种特殊的函数:聚合函数,
例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。having是分组(group by)后的筛选条件,分组后的数据组内再筛选。
三、having和where含义:
- having是分组(group by)后的筛选条件,分组后的数据组内再筛选;where则是在分组前筛选。
where子句中不能使用聚集函数,而having子句中可以,所以在集合函数中加上了HAVING来起到测试查询结果是否符合条件的作用。即having子句的适用场景是可以使用聚合函数。
having 子句限制的是组,而不是行。having 子句中的每一个元素也必须出现在select列表中。有些数据库例外,如oracle。参考技术A where
过滤条件里面应该用的是一个子查询就可以了,但是group
by
是必须加的。
因为,SQL标准规定在查询的字段里出现聚合函数时,只能出现分组字段。
GROUP BY,WHERE,HAVING之间的区别和用法
group by、having、where均为SQL语句中的函数。
一、区别
1、执行顺序不同
在SQL语句中,where语句的执行顺序先于group by,group by语句的执行顺序先于having。
2、执行条件不同
在group by的SQL语句中,select中返回的字段,必须包含在group by语句的后面,作为分组的依据,而且字段包含在聚合函数中。
在having 的SQL语句中,having只能用于group by,having 子句中的每一个元素也必须出现在select列表中,having语句可以使用聚合函数。
where不使用聚合函数。
二、用法
1、where用于筛选查询,通常用在select 的后面。
select city, count(*),age from dbo.user where departmentID=2;
2、group by用于对where的查询结果进行分组,通常放在where之后。
select city, count(*),age from dbo.user where departmentID=2 group by city,age;
3、having一般放在group by之后,对where和group by查询出来的分组进行过滤。
select city, count(*),age from dbo.user where departmentID=2 group by city,age having age >40;
扩展资料
ORDER BY子句中还经常会用到排序函数:ASC,DESC
其中,ASC表示升序,DESC为降序
排序函数一般放置在子句的末尾处,表示排序的方式。
例如:SELECT 课程编号,成绩 FROM Score WHERE 学号=‘2006091**1' ORDER BY 成绩 ASC;
参考资料来源:百度百科-SQL语句大全
参考技术A where是按照条件进行数据的过滤。goup by是分组统计数据的条件。
having是在group by统计之后对统计结果数据进行过滤。 参考技术B group by 分组 having 是对分组后的结果 做条件查询
where 是查询条件完成后在分组,一个在前一个在后 参考技术C having子句与where有相似之处但也有区别,都是设定条件的语句。
在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行.而where子句在查询过程中执行优先级别优先于聚合语句(sum,min,max,avg,count)。
简单说来:
where子句:
select sum(num) as rmb from order where id>10
//只有先查询出id大于10的记录才能进行聚合语句
having子句:
select reportsto as manager, count(*) as reports from employees
group by reportsto having count(*) > 4
以northwind库为例.having条件表达示为聚合语句。肯定的说having子句查询过程执行优先级别低于聚合语句。
再换句说话说把上面的having换成where则会出错。统计分组数据时用到聚合语句。
对分组数据再次判断时要用having。如果不用这些关系就不存在使用having。直接使用where就行了。
having就是来弥补where在分组数据判断时的不足。因为where执行优先级别要快于聚合语句。
聚合函数,这是必需先讲的一种特殊的函数:
例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。
SELECT SUM(population) FROM tablename
这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有
国家的总人口数。 通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。
当你指定 GROUP BY region 时, 属于同一个region(地区)的一组数据将只能返回一行值.
也就是说,表中所有除region(地区)外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值.
HAVING子句可以让我们筛选成组后的各组数据.
HAVING子句在聚合后对组记录进行筛选
而WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前
总结:
1.WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。
2.GROUP BY 子句用来分组 WHERE 子句的输出。
3.HAVING 子句用来从分组的结果中筛选行。
以上是关于SQL中where和group by可以连用吗?having算是对检索条件的补充吗?的主要内容,如果未能解决你的问题,请参考以下文章
SQL语句之order by group byhavingwhere
SQL语句中,如果有group by 和order by两个语句,是先分组还是先排序?