学习目标
- 使用LIKE、BETWEEN、IN进行模糊查询
- 使用聚合函数统计和汇总查询信息
模糊查询
在查询条件模糊、不明确的情况下,可以使用模糊查询。例如,查询张姓同学的信息,这种查询不是指定某个人的姓名,这样的查询都属于模糊查询。
模糊查询可以使用LIKE
关键字,通配符来进行。前面学习过的IS NULL
严格来说也是一种模糊查询,模糊查询还有基于某个范围内的查询或在某些列举值内的查询。
通配符
通配符是一类字符,它可以代替一个或多个真正的字符,查找信息时作为替代字符出现。T-SQL中的通配符必须与LIKE
关键字一起使用,以完成持殊的约束或要求。
在T-SQL中,提供了下表中的通配符
通配符 | 说明 | 示例 |
| 匹配一个字符 | A LIKE ‘C_’,则如Cs、Cd等都是符合条件的 |
| 匹配任意长度的字符串 | B LIKE ‘CO%’,则如CONST、COW等都是符合条件的 |
| 括号中所指定范围内的一个字符 | C LIKE ‘9W0[1-2]’,则如9W01、9W02都是符合条件的 |
| 不在括号中所指定范围内的任意一个字符 | D LIKE ‘9W0[^1-2]’,则如9W03、9W04都是符合条件的 |
使用LIKE进行模糊查询
在前面我们已经简单接触过如何使用LIKE来编写约束,LIKE运算符用于匹配字符串或字符串的一部分。由于该运算符只用于字符串,因此仅与字符数据类型(如char
或varchar
等)联合使用。
在进行数据更新、删除或者查询的时候,依然可以使用LIKE
关键字进行匹配查找,例如,查找姓张的学生信息:
SELECT * FROM students WHERE sname LIKE'张%'
或者查询住址包含“山东”字样的学生信息:
SELECT * FROM students WHERE saddress LIKE '山东%'
使用BETWEEN在某个范围内进行查询
使用关键字 BETWEBN
可以查找那些介于两个已知值之间的结果集。要实现这种查找,必须知道查找的初值和终值,并且初值要小于等于终值,初值和终值用AND
关键字分开。例如,在score表中查询分数在60(含)到80(含)之间的信息如下:
SELECT * FROM score WHERE grade BETWEEN 60 AND 80
如果写成如下形式:
SELECT * FROM score WHERE grade BETWEEN 80 AND 60
虽不会报语法错误,但也不会查询到任何信息。
此外,BETWEEN
查询在查询日期范围的时候使用得比较多。例如,查询不在2013年1月1号到2013年8月1号之间订购的图书列表:
SELECT * FROM Sales WHERE ord_date NOT BETWEEN '2013-1-1' AND '2013-8-1'
提示:这里使用
NOT
来对限制条件进行“取反”操作。
使用IN在列举值内进行查询
查询的值是指定的某些值之一,可以使用带列举值的IN
关键字来进行查询。将列举值放在圆括号里,用逗号分开。例如,查询济南、潍坊或者威海的学生姓名:
SELECT sname AS 学生姓名 FROM students WHERE saddress
IN('济南','潍坊','威海')ORDER BY sname
同样可以把IN
关键字和NOT
关键字合起来使用,这样可以得到所有不匹配列举值的行。
提示:列举值类型必须与匹配的列具有相同的数据类型。
聚合函数
在查询中还会经常碰到取某些列的最大值、最小值、平均值等信息,有时候还需计算出究竟查询到多少行数据。这个时候,查询的“统计数据”是用户比较关心的,这就涉及T-SQL的另外一类内部函数——“聚合函数”。
聚合函数能够基于列进行计算,将多个值合并为一个值,其作用是对一组值进行计算,并返回计算后的值。
下面介绍T-SQL提供的几个常用的聚合函数。
SUM()函数
SUM()
函数返回表达式中所有数值的总和,空值将被忽略。SUM()函数只能用于数字类型的列,不能够汇总字符、日期等其他数据类型。例如,查询学生编号为23的考试总分,可以使用如下查询。
SELECT SUM(grade) AS 23号的学生总分
FROM score
WHERE sno =23
注意,这种查询只返回一个数值,因此,不能够直接与可能返回多行的列一起使用来进行查询。例如:
SELECT SUM(grade) AS 23号的学生总分, cno AS 科目编号
FROM score
WHERE sno=23
AVG()函数
AVG()
函数返回的是表达式中所有数值的平均值,空值将被忽略。AVG()函数也只能用于数字类型的列。例如要查询及格线以上学生的平均值,语句如下:
SELECT AVG(grade) AS 平均成绩
FROM score
WHERE grade >= 60
MAX()函数和MIN()函数
MAX()
函数返回表达式中的最大值,MIN()
函数返回表达式中的最小值,这两个函数同样都忽略了任何空值,并且它们可以用于数字型、字符型及日期/时间类型的列。对于字符序列,MAX()
函数查找排序序列的最大值。而MIN()
返回排序序列的最小值。
例如,查询平均成绩、最高分、最低分的语句如下:
SELECT AVG(grade) AS 平均成绩, MAX(grade) AS 最高分, MIN(grade) AS 最低分
FROM score
WHERE grade >= 60
COUNT()函数
COUNT()
函数返回提供的组或记录集中的计数。COUNT()
函数可以用于除text
、 image
、ntext
以外任何类型的列。另外,也可以使用星号(*
)作为COUNT的表达式,使用星号可以不必指定特定的列而计算所有的行数,当对所有的行进行计数时,包括包含空值的行。
例如,查询总记录数的语句如下。
SELECT COUNT(*) AS 总记录数 FROM score
例如,查询单列(grade)记录总数的语句如下。
SELECT COUNT (grade) AS 分数记录数 FROM score
注意:单列统计总记录数时忽略空值。