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语句大全

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-07-26
where是按照条件进行数据的过滤。
goup by是分组统计数据的条件。
having是在group by统计之后对统计结果数据进行过滤。本回答被网友采纳
第2个回答  2014-12-09
group by 分组 having 是对分组后的结果 做条件查询
where 是查询条件完成后在分组,一个在前一个在后
第3个回答  2016-08-29
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 子句用来从分组的结果中筛选行。本回答被网友采纳

GROUP BY,WHERE,HAVING之间的区别和用法
一、区别 1、执行顺序不同 在SQL语句中,where语句的执行顺序先于group by,group by语句的执行顺序先于having。2、执行条件不同 在group by的SQL语句中,select中返回的字段,必须包含在group by语句的后面,作为分组的依据,而且字段包含在聚合函数中。在having 的SQL语句中,having只能用于group by,...

GROUP BY,WHERE,HAVING之间的区别和用法
group by 分组 having 是对分组后的结果 做条件查询 where 是查询条件完成后在分组,一个在前一个在后

GROUP BY,WHERE,HAVING之间的区别和用法
1.GROUP BY 子句用来分组 WHERE 子句的输出。2.WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。3.HAVING 子句用来从分组的结果中筛选行。having子句与where有相似之处但也有区别,都是设定条件的语句。在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行.而where子句在查询过程...

group by、where、having用法及顺序
1. where子句:非必须,但它针对的是每个单独的记录进行过滤。它的作用类似于在数据检索之前设定预选条件。2. group by子句:紧跟在where之后,对数据进行分组,通常用于聚合函数,如计数、求和等。这里的分组依据是select子句中除聚合函数外的其他列。3. having子句:在group by之后,对分组后的记录再次...

group by与having在结构上有什么不同?
区别:1.having:用于对where和group by查询出来的分组经行过滤,查出满足条件的分组结果。它是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作。2.group by:对select查询出来的结果集按照某个字段或者表达式进行分组,获得一组组的集合,然后从每组中取出一个指定字段或者表达式的值。 在说...

看一遍就理解:group by详解!
1. 简单应用与原理分析通过一个实例,我们来重温group by的基本用法。比如,统计员工表中每个城市的员工数量,SQL如下:SELECT city, COUNT(*) FROM employees GROUP BY city;其执行过程涉及临时表和排序,下面我们会详细解析。2. group by执行流程与where\/having区别加入where条件和索引后,执行流程会有...

sql中having只是和group by 一起用的吗?
Having的本质和where一样,是用来进行数据条件筛选。Having是在group by子句之后,可以针对分组数据进行统计筛选。但是where不行,通俗的讲where用在select之后group by之前,但是having用在group by之后。都是条件筛选的作用。二、group by语句 GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行...

SQL语句 里的order by 、group by、having、where 用在哪里
1.order by 是 按字段 进行排序.. 字段后面可跟 desc 降序..asc 升序..默认为升序2.group by 是进行分组 查询3.having 和 where 都属于 条件过滤 区别在于 一般having是和 group by 连用... 目的是 分组后进行的条件查询...而如果在group by 前面有where 则是表示 先条件过滤再 分组 ...

groupbyhaving的用法是什么?
GroupBy和Having是SQL中用于数据聚合和过滤的关键字。它们通常一起使用,用于对分组的数据进行筛选。详细解释:1. GroupBy的用法:GroupBy关键字在SQL中用于将数据根据一个或多个列进行分组。它通常与聚合函数一起使用,以便对每个分组执行计算。例如,如果您有一个包含销售数据的表格,您可以使用GroupBy按...

SQL中where和group by可以连用吗?having算是对检索条件的补充吗?
where 可以和 group by连用 但效果和having是不同的 where要求必须在group by 前面..意思是先过滤再分组 而having是必须在group by后面连用 是分组后的过滤 所以过滤条件在什么位置是有很大区别的3.sql中 要求前面有聚合函数和其他字段的,group by中必须把不是聚合函数的字段 加进去 ...

相似回答