T-SQL高级查询

        为了更方便快捷地完 成大量的任务,SOLServer提供了一些内部函数,可以和SOL Server的SELECT语句联合使用,也可以与UPDATE和INSERT一起使用,可以进行类型转换,日期处理,数学计算,实现系统功能。

根据用途,把函数分为五类,分别是系统函数、字符串函数、日期函数、聚合函数与数学函数。

首先简单介绍一下各类函数:

系统函数

T-SQL高级查询_第1张图片T-SQL高级查询_第2张图片

CONVERT和CAST的类型转换使用频繁,在很多场合均可使用。尤其是在网站应用中,常常需 要将各种类型的数据转换成指定格式的字符串,然后拼接成显示内容.。

字符串函数

字符串函数用于控制返回给用户的字符串,这些功能仅用于字符型数据。

T-SQL高级查询_第3张图片

字符串拼接很简单,两个字符串之间使用“+”即可。

日期函数 

        在SQL Server 中不能直接对日期运用数学函数,需要使用日期函数操作日期值,例如,如果执 行一个诸如“当前日期+1”的语句,SQL Server无法理解要增加的是一日、一月还是一年。 日期函数帮助提取日期值中的日、月及年,以便分别操作它们。

T-SQL高级查询_第4张图片

聚合函数 

常用的聚合函数有SUM()、AVG()、MAX()、MIN()和COUNT()

(1)SUM()函数返回表达式中所有数值的总和,它只能用于数字类型的列,不能够汇总 字符,日期等其他数据类型。

(2)AVG()函数返回表达式中所有数值的平均值,它也只能用于数字类型的列。

(3)MAX()函数返回表达式中的最大值,可以用于数字型、字符型及日期/时间类型的列。

(4) MIN()函数返回表达式中的最小值,可以用于数字型、字符型及日期/时间类型的列。

(4)COUNT()函数返回表达式中非空值的计数,它可以用于数字和字符类型的列。另外,也可以使用星号(*)作为COUNT()函数的表达式,使用星号可以不必指定特定的列而计算所有的行数。

数学函数

数学函数用于对数值进行代数运算,由于数学函数数量众多,不可能全部列举,这类举例部分

T-SQL高级查询_第5张图片

分组查询

        分组查询就是将表中的数据通过GROUPBY子句分类组合,再根据需要得到统计信息。如果需 要对分组结果进行筛选,只显示满足限定条件的组,需要使用HAVING子句。

当GROUP BY子句中使用HAVING子句时,查询结果只返回满足HAVING条件的组。在一个T-SOL 语句中可以有WHERE子句和HAVING子句,HAVING子句与WHERE 子句类似,均用于设置限定条件。 但HAVING子句和WHERE子句的作用有如下区别。

>WHERE子句的作用是在对查询结果进行分组前,根据WHERE条件筛选数据,条件中不能包 含聚合函数。

>HAVING子句的作用是在分组之后筛选满足条件的组,条件中经常包含聚合函数,也可以使 用多个分组标准进行分组。

当WHERE和HAVING同在一个SELECT语句中使用时,执行顺序为“W-ERE→GROUP BY→HAVING”

实验案例

BDON公司有一台已经安装了 SOL Server 2016的服务器,bdqn数据库中包含products表,表中 内容如下图所示。

T-SQL高级查询_第6张图片

需求描述

1.查询出厂日期晚于2017年4月的水果信息。

2.分组查询所有水果、蔬菜、坚果的总成本。

3.查询所有水果的名称和出厂日期,以特定格式拼接字符串,如“西瓜的出厂日期是: 2017/05/06"。 

4.查询所有蔬菜的平均成本。 

首先运用SSMS工具把表创建出来,再填入数据,SQL语句如下:

创建表列:

CREATE TABLE products
(
    编号 int identity (1,1) primary key,
    名称 nvarchar(50) not null,
    种类 nvarchar(20) not null,
    成本 money not null check(成本>=0),
    出厂日期 date not null
)

执行展示

填入行数据:

insert products (名称,种类,成本,出厂日期)
    values
        ('西瓜','水果','4.1','2017/05/06'),
        ('芹菜','蔬菜','1','2017/04/01'),
        ('番茄','蔬菜','2.9','2017/05/09'),
        ('黄瓜','蔬菜','2.2','2017/05/05'),
        ('香蕉','水果','6.1','2017/05/23'),
        ('核桃','坚果','28.5','2017/03/03'),
        ('开心果','坚果','38.11','2017/02/22'),
        ('蓝莓','水果','50.2','2017/05/11')

执行展示T-SQL高级查询_第7张图片

完成查找需求:

1. 查询出厂日期晚于2017年4月的水果信息。

SQL语句:select 名称,种类,成本,出厂日期 
                   from products
                   where 出厂日期 >='2017/05/01' and 种类='水果'  

运用了where查找了两个同时的条件达成查找需求。

执行语句展示T-SQL高级查询_第8张图片

2.分组查询所有水果、蔬菜、坚果的总成本。

SQL语句:select 种类,sum(成本) as 总成本
                 from products
                 group by 种类 

运用了聚合函数SUM()求和值总成本和分组查询group by子句组合达成查找需求。

执行语句展示T-SQL高级查询_第9张图片

3.查询所有水果的名称和出厂日期,以特定格式拼接字符串。

SQL语句:select 名称+'的出厂日期是' +cast(出厂日期 as varchar(15)) as 出厂日期简介
                 from products 
                 where 种类='水果'

运用了系统函数和where限制条件组合达成查找需求。

执行语句后展示:T-SQL高级查询_第10张图片

4.查询蔬菜的平均成本。

SQL语句:select 种类,avg(成本) as 蔬菜的平均成本
                  from products 
                  where 种类<>'坚果'
                  group by 种类 
                  having avg(成本)<20 

先运用聚合函数AVG()求种类的平均成本和where限制条件移除坚果类的平均成本,再结合分组查询group by子句求出蔬菜和水果的平均成本

对于分组结果求出的平均成本,再结合分组查询having 子句移除水果的平均成本,剩下的就是所有蔬菜的平均成本。

执行语句后展示:

至此,完成整个实验需求。


 

你可能感兴趣的:(sql,数据库)