SQL中where和group by可以连用吗?having算是对检索条件的补充吗?

SQL中where和group by可以连用吗?having算是对检索条件的补充吗?,第1张

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。

Group

By

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6666647.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存