SQL Server 数据库高级查询语句

10款最佳SQL Server服务器监控工具

服务器是网络中最重要的资源之一,SQL Server的广泛普及使SQL Server监控工具成为长期网络维护的先决条件。使用服务器监控工具跟踪服务器的运行状况可以为你提供解决性能问题所需的信息。从长远来看,解决性能问题将使你的网络保持正常运行。 忽视服务器监控

在前几篇文章中介绍了 SQL SERVER 数据库的设计,以及 SELECT 语句的简单使用方法,这篇文章继续介绍其他高级查询方法。

SQL Server 数据库设计

SQL Server 数据库设计–数据定义语言/数据操纵语言

SQL Server 数据库设计–SELECT语句

SQL Server 数据库设计–SELECT语句之二

首先要介绍的就是分组查询。比如我们有一个销售订单,这个订单里包含了地域,人员等多个不同的字段信息,我们需要按照地域进行分组查询每个地域的总销售额。或者要按照人员查询每个人的销售总额等信息,那么就需要用到这个分组查询的功能。

  1. 分组查询 GROUP BY

使用 GROUP BY 根据一个或者多个列对结果进行分类汇总,通常和统计函数一起使用,常用的统计类函数有:

COUNT(统计组中项数) / COUNT (*),SUM,AVG,MAX,MIN等。

语法结构如下:

SELECT column_name,aggregate_function(column_name)FROM table_nameWHERE search_conditionGROUP BY group_by_expression;

示范数据库表:

GROUP BY 实例:查询各个城市总的销售额是多少;

SELECT Country, SUM(sales) AS TotalSales FROM Sales GROUP BY Country;

查询结果如下:

从上面我们可以看出,GROUP BY 将城市名称相同的销售额聚集在一起,然后通过 SUM() 聚合函数计算出他们的总和。

重点:GROUP BY 主要作用是用来进行分组聚合查询,有时候会用来进行排重,与 DISTINCT 关键字作用类似。常与 HAVING 关键字一起使用,用来对分组结果进行筛选。

注意: GROUP BY 子句中必须保证 SELECT 语句后列值是可计算的或者在 GROUP BY 列表中。

下面语句会报错:

SELECT Country, Region, SUM(sales) AS TotalSales FROM Sales GROUP BY Country;

2. 统计查询 HAVING

筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用 having 条件过滤出特定的组,也可以使用多个分组标准进行分组。

语法结构如下:

SELECT column_name,aggregate_function(column_name)FROM table_nameWHERE search_conditionGROUP BY group_by_expressionHAVING search_conditionORDER BY order_ expression [ASC] | [DESC] ;

示范数据库表:

HAVING 实例:

1)以城市进行分组查询总的销售额是多少并以城市为“Canada”组为过滤条件;

SELECT Country, SUM(sales) AS TotalSales FROM Sales GROUP BY CountryHAVING Country = 'Canada'

2)以城市进行分组查询总的销售额是多少并以累计销售额大于100为过滤条件;

SELECT Country, SUM(sales) AS TotalSales FROM Sales GROUP BY CountryHAVING SUM(sales) > 300

从上面可以看出通过 HAVING 进行过滤后,查询到的结果和第一项中查询到的结果不同了。

那么 WHERE 也是过滤条件,它和 HAVING 有什么区别呢?

区别:where 子句的作用是在对查询结果进行分组前,将不符合 where 条件的行去掉,即在分组之前过滤数据,where 条件中不能包含聚组函数,使用 where 条件过滤出特定的行。

那么我们来看看一下两条语句的区别:

SELECT Country, Region, SUM(sales) AS TotalSales FROM Sales GROUP BY Country, RegionHAVING SUM(sales) >= 100;

SELECT Country, Region, SUM(sales) AS TotalSales FROM Sales WHERE Country ='Canada'GROUP BY Country, RegionHAVING SUM(sales) >= 100;

更多 SQL Server 数据库知识以及报表设计方法,请关注我的专栏,获取更多的帮助。

【云技术在线】为您提供以下专业技术服务:

上云服务:上云架构设计,大流量高并发架构设计,混合云架构设计,上云迁移,云上容灾,跨国云访问加速等;

安全服务:等保咨询及实施,渗透测试,漏洞扫描,木马查杀,安全加固,应急响应,DDOS/CC防护,勒索病毒防护,安全托管等;

运维服务:Linux系统运维,数据恢复及备份,负载均衡集群搭建及维护,数据库集群搭建及维护,网站运行环境搭建及维护,系统性能调优,中间件性能调优,数据库性能调优,数据库读写分离,分库分表,性能(压力)测试,7*24小时监控及故障应急响应,故障排查,大流量高并发活动护航等。