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。 GroupBy
和
Having,
Where
,Order
by这些关键字是按照如下顺序进行执行的:Where,
Group
By,
Having,
Order
by。
一、使用count(列名)当某列出现null值的时候,count(*)仍然会计算,但是count(列名)不会。
二、数据分组(group
by
):
select
列a,聚合函数(聚合函数规范)
from
表明
where
过滤条件
group
by
列a
group
by
字句也和where条件语句结合在一起使用。当结合在一起时,where在前,group
by
在后。即先对select
xx
from
xx的记录集合用where进行筛选,然后再使用group
by
对筛选后的结果进行分组。
三、使用having字句对分组后的结果进行筛选,语法和where差不多:having
条件表达式
需要注意having和where的用法区别:
1.having只能用在group
by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。
2.where肯定在group
by
之前,即也在having之前。
3.where后的条件表达式里不允许使用聚合函数,而having可以。
四、当一个查询语句同时出现了where,group
by,having,order
by的时候,执行顺序和编写顺序是:
1.执行where
xx对全表数据做筛选,返回第1个结果集。
2.针对第1个结果集使用group
by分组,返回第2个结果集。
3.针对第2个结果集中的每1组数据执行select
xx,有几组就执行几次,返回第3个结果集。
4.针对第3个结集执行having
xx进行筛选,返回第4个结果集。
5.针对第4个结果集排序。
拓展资料
当我们看到一个类似上述的包含了where,
group
by,
having,
order
by等关键字的SQL时,我们要首先要知道其执行顺序是怎样的,才能判断出其所表达的含义;
下面列出其执行顺序:
1.
根据where子句选择行;
2.
根据group
by
子句组合行;
3.
根据having子句筛选组;
4.
根据order
by子句中的分组函数的结果对组进行排序,order
by必须使用分组函数或者使用Group
by子句中指定的列;
下面看一个例子:
我们现在知道,其执行顺序如下:
1.基于Where
Rating>1
筛选出符合条件的行;
2.基于group
by
CategoryName
对筛选的结果进行分组;
3.为每个CategoryName组计算Count(*)
4.
基于having
CategoryName
like
'A%'留下符合条件的组
5.
根据order
by
的条件对剩下的行组进行排序,SQL中的count(*)也是分组函数。
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语句大全
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)