SQLServer学习笔记六:模糊查询和聚合函数

本文详细介绍了SQL中的模糊查询方法,包括LIKE、BETWEEN和IN关键字的使用,以及如何进行范围查询和列举值查询。同时,讲解了聚合函数的应用,如SUM、AVG、MAX、MIN和COUNT,帮助理解如何在SQL中进行统计和汇总操作。通过实例展示了如何在实际查询中应用这些技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习目标

  • 使用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(含)之间的信息如下:
在这里插入图片描述

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少儿编程乔老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值