这周我们将学习
数据查询的更高级的功能,包括函数查询、 分组查询、
多表查询等,还将学习 SQL Server 的 基本安全原则,以及如何通过
C# 连接数据库 使用数据库。
对于 学生成绩表等含有数值数据的信息,
除数据列表外,我们经常需要计算它们的和、 平均值、
最大值、 最小值等统计信息 使用 SQL
的函数轻松实现 第一类函数我们介绍聚合函数。
聚合函数呢 就是对一组值进行计算,得到一个返回值
SUM() 用来对一组数据求和;AVG()
用来求平均值; MIN() 求最小值;MAX()
求最大值;COUNT() 统计记录的个数
我们来看几个例子。
第一个例子呢 是求所有学生的平均年龄
我们可以这样写这个 SELECT 语句,SELECT
AVG(sage),就是对年龄 求平均值,FROM
Student,我们执行它 好,这就是年龄的平均值。
年龄的平均值呢,这个是没有列名的,所以我们给它加一个列的别名 AS
平均 就有了平均值了。
第二个例子呢,是求所有学生的最大、 最小、 平均年龄和人数。
人数呢,我们使用这个 COUNT 这个函数,SELECT
语句 可以这样来写:SELECT MAX 求最大、
对年龄求最小、 对年龄求平均、 COUNT(*)
就是统计这个所有的 记录数,然后 FROM Student。
注意啊,这些统计项之间也是用逗号隔开的 跟这个字段列表是一样的,这就是最大、
最小、 平均跟 记录的个数,也就是学生的人数。
我们也可以给它加上 别名、 最大、
最小、 平均、
人数
我们还可以给呢,这个查询呢加上条件,我们要求航天班 所有学生的最大、
最小、 平均年龄和人数 那我们就在这个后头加个条件。
WHERE sclass 等于什么呢,航天 等于航天。
好,我们再执行这一句,这就是
航天这个班里头的年龄的最大、 最小和平均值六个人,这就是
聚合函数里头的统计查询
数据有不同的类型,所以呢我们也经常需要做类型的转换,类型的转换
主要使用的函数就是这个CONVERT() 它的格式是
CONVERT 一对圆括号 里面有三个参数,一个是
datatype,是我们要转换成的目标的数据类型 expression
是一个表达式,我们要把这个表达式的值转换 成 datatype 这种类型。
当目标类型 是日期型的时候,需要 [,style]
这个参数,它实际上是日期的 格式代号
将整数转换成字符串,我们可以写 SELECT CONVERT
(varchar,120),就是把 120
转换成字符串 还可以把实数转换成字符串,那么这里头呢前头是
varchar,后面是 120.12,就把实数转换成字符串
还可以把字符串转换成整数 120
是一个字符串,把它转换成整数。
字符串 转换成实数,这是一个字符串,转换成实数,要说明
整个是多少位、 小数点后面多少位
日期转换成字符串
这是一个日期,这个函数呢能够获得当前的日期,目标是一个字符串
就当前日期的默认的这样一个字符串 那么日期转换成字符串的时候呢,我们常常要加上一个
格式代号,比方说我们要把日期 转换成年、
月、 日这样形式的字符串 我们就在后面加一个代号 102,就是年、
月、 日 中间是用点隔开的,这样一种格式。
我们要转换成 年、 月、
日,中间呢是用斜杠隔开的字符串 我们使用的代号呢,是
111 字符串呢
也可以转日期,这是字符串,这是日期 这是
2016 年 5 月 10
号 啊,它能够转换成日期型,也可以这样写这个字符串
用斜杠隔开这个年、 月、 日,也是可以的。
还可以呢,是用 短划线来隔开这个日期,这是字符串,也可以这样写,这是 5
月 10 日,2016 年 都可以,转换成日期呢,是一样的
这是一些常用的 日期格式的代码,也就是那个 CONVERT 里头的那个
style 那个参数 日期型函数
GETDATE() 来获取当前的日期和时间
我们可以写 SELECT GETDATE(),这样就得到当天的日期
DATEADD() 给日期增加年、
月、 日或者是时间,基本格式是 DATEADD()
有三个参数:一个是 part、 number 和 date,其中呢
date 呢是一个日期的表达式,number
呢是一个数 part 呢指明了是日期的哪一部分。
所以这个函数呢,意思呢就是说给这个日期
在这部分加上这样一个数,那么这部分呢可以是年、 月、
日,也可以是时、 分、 秒等等
日期在某一部分上加一个数 这样我们写
SELECT DATEADD(year,0),后面是
一个日期型的一个字符串,那么就在这个日期上 年的这一部分加
0,实际上就是什么都不加,我们先看一下这个日期 就是这个日期,然后呢我们把这个
0 部分呢写成一个 5,那就是在 年这一部分呢加上
5,那么 2010 年就变成了 2015 年,变成了 2015
年 我们还可以呢,在月上加,月 这个月上加了个
5,刚才是 5 月,现在就变成了 10
月 还可以呢,在日上加,在日上加
就刚才是 10 号,就变成了 15
号 还可以在时
上去加了,还可以是分 这就分上加了一个
5,分上加了一个 5。
还可以在秒上加 还可以在秒上加,就是时、 分、
秒,在秒上加了一个 5
这个查询语句呢 是在 student
这个表里头的,生日的这个字段上的年份这 这一部分加上一个 5。
我们先来看一下,那么学生表里头的 出生日期它是什么样子的
学生的出生日期是 96 年 97 年,95 年等等。
我们看一下加上以后是什么样子的 这个年份就变成了
01,02,2000 等等,这样的 年份了。
我们还可以再查询一下这个表,注意呢
这个呢是查询的显示结果,表中的数据呢并没有改变 DATEDIFF
两个日期相减,使用格式是 DATEDIFF
一对圆括号,里面有三个参数,它的功能是:date 2
和 date 1 在 part 这一部分上相减。
其中的 part 呢可以是年、 月、 日、 时、
分、 秒等等
日期在某一部分减 使用
SELECT DATEDIFF,后面是三个参数,就是
后面这个日期跟前头这个日期在年上做减法,我们来看执行结果 那就是
16- 10,那就是 6 应该是 6。
我们还可以在这个学生这个表里头的 GETDATE 就是当前日期跟学生的出生日期在年上相减,那这就是
他的年龄,这是学生的年龄。
DATENAME 获得 date 的
part 那一部分,返回的呢是一个字符串
这一句呢就获得当前日期的年份
如果我们把这个地方呢改成 month,就是获得当前日期的月份
还可以是日,还可以时、 分、 秒等等
我们看这个查询语句 从这个学生表里头查询班级、
学号和名字 然后这里头呢就查询这个出生日期的年这一部分,那就是说我们只关心他的出生年份
而不关心他的月份和日期,然后呢查询的是电气 61
班的学生 至于电气 61 班,原来这个地方是有月和日的,现在这个地方呢就只有年
只显示年这一部分。
这是些数学函数 获得 π 的值,求三角函数
指数,对数,开平方和随机数。
这是 一些常用的字符串处理函数,求
左边的子串,从右边求子串,大写转小写
小写转大写,删除字符串开头的空格,删除字符串末尾的空格 反转字符串,求子串。
这些函数在查询时呢也经常使用
我们看一个例子:查询
物理班的学生信息。
我们先来浏览一下 学生表里头的学生信息。
物理班的学生 有七位,下面呢我们给它呢加上条件
就是查询班级等于物理的学生的信息
注意刚才我们浏览的时候看到物理班有七位同学,但是我们查出来呢
只有五位同学,这是什么原因呢?我们看
事实上这里头有两位同学他的班级这个前头呢 是有空格的。
所以呢有空格跟没有空格是不一样的,所以我们查询
物理班的学生信息,班级字段值有空格的那些学生的信息呢就没有被查出来
那么我们给它呢加上一个 trim,就是这个班级这个字段前头 加上 ltrim,加上
rtrim,那就是说它这个班级啊,它的值子里头啊它的前面的空格 它的后面的空格都去掉,我们再来查询
所有的七位同学的信息呢 都能查得到。
关于函数查询我们就介绍到这儿
[空白_录音]