学习目标

  • 使用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运算符用于匹配字符串或字符串的一部分。由于该运算符只用于字符串,因此仅与字符数据类型(如charvarchar等)联合使用。

在进行数据更新、删除或者查询的时候,依然可以使用LIKE关键字进行匹配查找,例如,查找姓张的学生信息:

SELECT * FROM students WHERE sname LIKE'张%'

或者查询住址包含“山东”字样的学生信息:

SELECT * FROM students WHERE saddress LIKE '山东%'

使用BETWEEN在某个范围内进行查询

使用关键字 BETWEBN可以查找那些介于两个已知值之间的结果集。要实现这种查找,必须知道查找的初值和终值,并且初值要小于等于终值,初值和终值用AND关键字分开。例如,在score表中查询分数在60(含)到80(含)之间的信息如下:

sql server like 某个字段 sqlserver中like查询_数据库开发

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()函数可以用于除textimagentext以外任何类型的列。另外,也可以使用星号(*)作为COUNT的表达式,使用星号可以不必指定特定的列而计算所有的行数,当对所有的行进行计数时,包括包含空值的行。

例如,查询总记录数的语句如下。

SELECT COUNT(*) AS 总记录数 FROM score

例如,查询单列(grade)记录总数的语句如下。

SELECT COUNT (grade) AS 分数记录数 FROM score

注意:单列统计总记录数时忽略空值。