项目四
数据表记录检索
138
目录
139
任务 1 使用关键字进行单表查询
任务 2 使用聚合函数进行函数查询
任务 3 多表间进行连接查询
任务 4 使用关键字进行子查询
任务 5 使用正则表达式进行查询
使用关键字进行单表查询
任务 1
140
项目四 数据表记录检索
1. 了解查询的 SQL 语法格式。
2. 掌握基本查询操作。
3. 能使用各种关键字进行查询。
141
项目四 数据表记录检索
142
基本查询是使用数据库的基本操作,除了查询所有信息外,更多的时
候是指定条件进行查询的,这样才能实现高效快捷地找到所需要的信息。
本任务要求使用 Navicat 查询课程表中“课程学分”(cou_credit)为
3 且“课程类型”(cou_type)为选修的课程信息,查询结果如图所示。
项目四 数据表记录检索
143
查询结果
项目四 数据表记录检索
144
一、基本查询
查询语句是 SQL 语言以及 MySQL 中极为重要的语句。数据库最常使用
的四大功能是查询、增加、更新、删除,其中查询功能是展示数据库中存放
数据的最基本的方式。查询使用的是 SELECT 语句,它的使用方式既可以简
单化也可以复杂化,其功能十分强大。
项目四 数据表记录检索
基本查询语句 SELECT 的基本语法格式如下(其中 {} 表示必选其一或多
选,[ ] 表示可选)。
145
项目四 数据表记录检索
二、指定查询字段
按字段查询是指查询数据表中指定字段的数据。在 MySQL 中,可以使用
通配符“*”指定查询所有列,也可以使用“< 字段名 >”直接指定字段名称进
行查询。查询字段的语法格式如下。
146
项目四 数据表记录检索
三、用关键字 WHERE 进行条件查询
1. 用比较运算符实现简单条件
除了字段查询外,为了满足用户更多的查询需求,提高查询效率,可指
定条件查询相关数据。指定条件查询需要使用 WHERE 子句来指定条件,指
定条件查询的 SQL 语法格式如下。
147
项目四 数据表记录检索
如果要从众多记录中查询出指定的记录,需要设定查询的条件。在使用
WHERE 子句时,需要使用比较运算符来表示查询条件。常用的比较运算符见
下表。
148
常用的比较运算符
项目四 数据表记录检索
149
常用的比较运算符
项目四 数据表记录检索
2. 用关键字 IN 实现集合条件
使用关键字 IN 可以判断某个字段的值是否在指定的集合中。如果字段的
值在集合中,则满足查询条件能进行查询;如果不在集合中,则不满足查询
条件。其语法格式如下。
150
项目四 数据表记录检索
3. 用关键字 BETWEEN AND 实现范围条件
关键字 BETWEEN AND 的范围查询与关键字 IN 的查询有所区别。IN 子
句用于查询字段值在指定集合内的数据,而 BETWEEN AND 子句用于查询字
段值在指定区间内的数据,不在该区间内的数据将不会出现在查询结果中。
关键字 BETWEEN AND 范围查询的 SQL 语法格式如下。
151
项目四 数据表记录检索
4. 用关键字 LIKE 实现模糊条件
关键字 LIKE 是 SQL 中常用的比较运算符,用于实现模糊查询。LIKE 在
使用时会搭配两种通配符——百分号“%”和下画线“_”。其中,通配符
“%”可以匹配任何数量的字符包括零个字符;通配符“_”只能匹配一个字
符。
152
项目四 数据表记录检索
5. 用关键字 IS NULL 实现空值条件
关键字 IS NULL 用来判断数据表中某字段的值是否为空(NULL)。当
某条记录中指定字段的值为空(NULL)时,则该记录满足查询条件,可被查
询输出;如果该字段的值不为空,则不满足查询条件,不会被输出。其 SQL
语法格式如下。
153
项目四 数据表记录检索
6. 用关键字 AND、OR 实现复合条件
相对于基本查询,单一条件可能无法满足更多的需求,SQL 中提供了关
键字 AND ,可以为查询语句指定多个条件。使用关键字 AND 进行条件查询
时,只有当记录中的字段值满足了全部条件时,才能成功地完成查询;反之,
则不满足查询条件,无法被查询输出。可以同时使用多个 关键字AND 来连接
多个表达式。AND 子句的 SQL 语法格式如下。
154
项目四 数据表记录检索
关键字 OR 与 关键字 AND 都可以用于指定多个条件,但是与 关键字
AND 不同的是,当记录中的字段值能满足 OR 子句众多条件中的一个时就能
实现查询;反之,则不符合查询条件,无法被查询输出。OR 子句的 SQL 语
法格式如下。
155
项目四 数据表记录检索
四、用关键字 DISTINCT 去除结果中的重复行
数据表存储的数据在某些情况下会出现大量重复的情况,例如分类、统
计等情况就需要使用关键字 DISTINCT,它能去除查询结果中的重复记录,让
数据能更加直观地展示,DISTINCT 子句的 SQL 语法格式如下。
156
项目四 数据表记录检索
五、用关键字 ORDER BY 对查询结果进行排序
对于数字、字母等有顺序的数据,可以使用关键字 ORDER BY 对查询的
结果进行升序或降序排列。ORDER BY 子句的 SQL 语法格式如下。
157
项目四 数据表记录检索
六、用关键字 LIMIT 限制查询结果的数量
有时查询结果中记录较多,不方便查看,可使用 MySQL 提供的关键字
LIMIT 来限制查询结果的数量,分页显示查询结果。其语法格式如下。
158
使用聚合函数
进行函数查询
任务 2
159
项目四 数据表记录检索
1. 了解函数的作用。
2. 了解常用的单行函数。
3. 能使用聚合函数进行函数查询。
4. 能使用关键字 GROUP BY 和 HAVING 进行查询。
5. 了解 SELECT 语句的执行过程。
160
项目四 数据表记录检索
161
MySQL 内置函数可直接通过函数名调用,
帮助用户简化复杂的数据处理,降低数据维
护与管理难度。
本任务要求通过 Navicat 查询成绩表中每
门课程的平均成绩,结果保留为整数,得到
查询效果如图所示。 每门课程的平均成绩
项目四 数据表记录检索
162
一、函数概述
1. 函数的作用
函数在计算机语言的使用中贯穿始终,函数可以把经常使用的代码封装
起来,需要的时候直接调用即可,这样既提高了代码的开发效率,又提高了
代码的可维护性。通过使用函数,可以极大地提高用户对数据库的管理效率。
项目四 数据表记录检索
2. 不同 DBMS 函数的差异
不同 DBMS 的函数实现差异性很大,远超过 SQL 语言版本间的差异。实
际上,只有很少的SQL 函数是被 DBMS 同时支持的。
大部分 DBMS 会有特定的函数,这就意味着采用 SQL 函数的代码可移植
性是很差的,因此,在使用函数的时候要特别注意。
MySQL 提供了丰富的内置函数,这些函数使得数据的维护与管理更加方
便。根据实现的功能不同,函数可以分为数值函数、字符串函数、日期和时
间函数、流程控制函数、加密与解密函数、获取 MySQL 信息函数、聚合函数
等。按照操作记录的行数和结果返回数不同,可将这些丰富的内置函数分为
单行函数和聚合函数(或分组函数)。
163
项目四 数据表记录检索
3. 常用的单行函数
单行函数对每条记录单独计算并返回结果,常用的有数值函数、字符串
函数、日期和时间函数等。
(1)常用的数值函数见下表。
164
常用的数值函数
项目四 数据表记录检索
165
常用的数值函数
项目四 数据表记录检索
166
常用的数值函数
项目四 数据表记录检索
(2)常用的字符串函数见下表。
167
常用的字符串函数
项目四 数据表记录检索
168
常用的字符串函数
项目四 数据表记录检索
(3)常用的日期和时间函数见下表。
169
常用的日期和时间函数
项目四 数据表记录检索
170
常用的日期和时间函数
项目四 数据表记录检索
4. 常用的聚合函数
聚合函数对一组数据返回单个统计值,通常与 GROUP BY 配合使用。SUM
( ) 函数用于计算表中某个数值类型字段取值的总和。AVG( ) 函数用于计算表
中某个数值类型字段取值的平均值。MAX( )、MIN( ) 函数用于计算表中某个
数值类型字段取值的最大值和最小值。COUNT( )函数用于统计表中的记录数,
如果参数不为“*”,返回所选择集合中非 NULL 值的行的数目;如果参数为
“*”,返回所选择集合中所有行的数目,包含 NULL 值所在的行。没有
WHERE 子句的 COUNT(*) 是经过内部优化的,能快速地返回表中所有记录
的总数。
171
项目四 数据表记录检索
上述函数的 SQL 语法格式一致,其语法格式如下。
172
项目四 数据表记录检索
二、用关键字 GROUP BY 分组查询
通过 GROUP BY 子句可以将数据划分到不同的组中,实现对记录进行分
组查询。GROUP BY 子句常常与聚合函数配合使用,SELECT 语句中未使用
聚合函数的字段应包含在 GROUP BY子句中。
1. 使用关键字 GROUP BY 进行分组查询
使用 GROUP BY 关键字的 SQL 语法格式如下。
173
项目四 数据表记录检索
2. 按多个字段分组
使用关键字 GROUP BY 时还可按多个字段分组。分组过程中,先按照第
一个字段分组,当第一个字段有相同值时,再按第二个字段分组,其余以此
类推。
174
项目四 数据表记录检索
三、用关键字 HAVING 分组过滤条件进行查询
HAVING 语句通常与 GROUP BY 语句联合使用,用来过滤由 GROUP
BY 语句返回的记录集。其 SQL 语法格式如下。
175
多表间进行连接查询
任务 3
176
项目四 数据表记录检索
1. 了解连接查询的作用。
2. 掌握内连接查询操作。
3. 掌握外连接查询操作。
4. 能合并查询结果。
177
项目四 数据表记录检索
连接查询(JOIN 操作)是 SQL 中用于整合多个相关数据表数据的核心机
制。不同的数据表之间存在一定的联系,单表查询无法实现复杂数据表之间
的连接,因此,使用连接查询,可利用数据表之间存在关联的特点进行多表
间的查询。
178
项目四 数据表记录检索
本任务要求使用 Navicat 查询计算机系学生的平均分数,要求该平均分数
取整数,得到的查询结果如图所示。
179
计算机系学生的平均分数
项目四 数据表记录检索
一、连接查询
连接是关系数据库的核心机制,用于通过共有字段(如外键)关联多表
数据。连接主要分为两类:内连接(INNER JOIN)和外连接(OUTER
JOIN)。其中,内连接仅返回两表匹配的行(交集)。外连接包括左连接
(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。其中,
左连接保留左表全部行,右表无匹配时填充 NULL。右连接保留右表全部行,
左表无匹配时填充 NULL。全连接(FULL JOIN)返回所有匹配与不匹配行。
180
项目四 数据表记录检索
1. 内连接查询
内连接查询使用比较运算符进行表间某(些)列数据的比较操作,并列
出这些表中与连接条件相匹配的数据行,组合成新的记录。也就是说,在内
连接查询中,只有满足条件的记录才能出现在结果中。
内连接查询的 SQL 语法格式如下。
181
项目四 数据表记录检索
2. 外连接查询
内连接查询仅返回查询结果集合中符合连接条件的行;而外连接查询既
返回查询结果集合中符合连接条件的行,还包括左表(左外连接或左连接)、
右表(右外连接或右连接)或两个连接表(全外连接)中的所有数据行。
外连接查询分为左外连接查询(左连接查询)、右外连接查询(右连接
查询)和全外连接查询。
182
项目四 数据表记录检索
LEFT JOIN(左连接查询)子句可以返回包括左表中的所有记录和右表中
连接字段值相等的记录。
左连接查询的结果包括 LEFT[OUTER]JOIN 子句中指定的左表的所有行,
而不仅仅是连接字段所匹配的行。
全外连接查询返回的结果集合中包含了左表中的所有记录和右表中的所
有记录,不论是否存在匹配记录。外连接字段的 SQL 语法格式如下。
183
项目四 数据表记录检索
二、定义别名
在 MySQL 中,输出查询字段默认使用其列名,由于语句可能较为烦琐或
者字段、表名称较为复杂,容易出现错误拼写等情况。MySQL 支持为表和字
段取别名,使用别名能提高语句的可读性,同时也能为输出结果提供更清晰、
精确的命名。为字段定义别名时,使用关键字 AS,其 SQL 语法格式如下。
为数据表定义别名时,同样使用关键 AS,其 SQL 语法格式如下。
184
使用关键字进行子查询
任务 4
185
项目四 数据表记录检索
1. 了解子查询的概念。
2. 掌握子查询的嵌套方式。
3. 能使用关键字进行子查询操作。
186
项目四 数据表记录检索
如果说连接查询是通过连接不同的数据表形成一个数据源进行查询,子
查询则是通过在查询中嵌套其他查询来获取结果。嵌套查询的语句可能不够
简洁,但执行效率要比多次查询高,且对于较为复杂的查询要求来说,子查
询提供了更强的功能和灵活性。
本任务要求使用 Navicat 查询选修了“数据库原理及应用”课程的学生姓
名,执行效果如图所示。
187
项目四 数据表记录检索
188
选修“数据库原理及应用”课程的学生姓名(部分)
项目四 数据表记录检索
子查询是指一个查询语句嵌套在另一个查询语句内部的查询,这个特性
从 MySQL 开始引入。在 SELECT 语句中先计算子查询,其结果作为外层
查询的过滤条件,查询可以基于一张表或者多张表。子查询中常用的关键字
有 IN、EXISTS 等。子查询中也可以使用比较运算符。子查询可以添加到
SELECT、UPDATE 和 DELETE 语句中,而且可以进行多层嵌套。
本项目中所使用的相关关键字的 SQL 语法格式如下。
189
项目四 数据表记录检索
一、带比较运算符的子查询
比较运算符广泛地运用在查询中,子查询也可以使用比较运算符,包括
“=”“!=”“>”“>=”“<”“<=”等。
比较运算符在子查询中的用法与基本查询一致,子查询也是通过查询嵌
套形成的。用户可以通过一定程度的查询嵌套,实现连接查询。
190
项目四 数据表记录检索
二、带关键字 IN 的子查询
使用关键字 IN 进行子查询时,内层查询语句仅仅返回一个数据列,这个
数据列里的值将提供给外层查询的语句进行比较操作。
三、带关键字 EXISTS 的子查询
关键字 EXISTS 后面的参数是一个任意的子查询,系统对子查询进行运
算以判断其是否返回行,如果至少返回一行,那么 EXISTS 子句的结果为
TRUE,此时外层查询语句将进行查询;如果子查询没有返回任何行,那么
EXISTS 子句返回的结果为 FALSE,此时外层语句将不进行查询。
191
项目四 数据表记录检索
四、带关键字 ANY 的子查询
关键字 ANY 表示数据满足其中任意一个条件即可返回查询结果,该关键
字通常与比较运算符一起使用。使用关键字 ANY 时,只要满足子查询语句返
回的结果中的任意一个,就可以通过该条件来执行外层查询语句。其 SQL 语
法格式如下。
如果比较运算符为“<”,则表示小于子查询结果集中的任意一个值,即
小于结果集中的最大值;如果比较运算符为“>”,则表示大于子查询结果集
中的任意一个值,即大于子查询结果集中的最小值。
192
项目四 数据表记录检索
五、带关键字 ALL 的子查询
虽然关键字 ALL 与关键字 ANY 都常与比较运算符一起使用,但性质有
所不同,关键字ALL 表示满足所有条件,使用关键字 ALL 时,只有满足子查
询返回的所有结果,才会继续执行外层查询。其 SQL 语法格式如下。
如果比较运算符为“<”,则表示小于子查询结果集中所有的值,即小于
结果集中的最小值;如果比较运算符为“>”,则表示大于子查询结果集中所
有的值,即大于结果集中的最大值。
193
使用正则表达式进行查询
任务 5
194
项目四 数据表记录检索
1. 了解正则表达式。
2. 能使用正则表达式进行查询。
195
项目四 数据表记录检索
正则表达式通常被用来检索或替换那些符合某个模式的文本内容,根据
指定的模式匹配文本中符合要求的字符串。正则表达式的查询能力比通配符
更加强大,而且更加灵活。
本任务要求通过正则表达式查询学生表“tb_student”的字段
“cla_id”中以字母“B”开头的记录,得到的执行效果如图所示。
196
项目四 数据表记录检索
197
字段“cla_id”中以字母“B”开头的记录
项目四 数据表记录检索
正则表达式是一种用于匹配和操作文本的强大工具,可以在文本中查找、
替换、提取和验证特定的模式。例如,从一个文本文件中提取电话号码,查
找一篇文章中重复的单词,或者替换用户输入的某些敏感词语等,这些场景
都可以使用正则表达式。正则表达式强大而且灵活,可以应用于非常复杂的
查询。
在 MySQL 中,使用运算符 REGEXP 来执行正则表达式匹配查询,其基
本形式如下。
198