IE盒子

搜索
查看: 137|回复: 1

MySQL数据库技术与应用—数据库单表查询—基础查询 ...

[复制链接]

4

主题

10

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2023-1-15 14:02:52 | 显示全部楼层 |阅读模式

在购物网站中,后端的数据库存放着数以千计的商品信息。每当用户浏览商品时,数据库都会进行大量的 SELECT 操作来查询相关数据。另外,用户也可以通过在网站页面的搜索框中检索关键字来达到更快的搜索效果。在实际工作中,对数据查询的需求也比对数据增、删、改的需求更多。本文详细讲解数据查询的相关内容,排序查询、聚合函数、分组查询、HAVING字句、LIMIT分页。。
基础查询
Ø 创建基本的数据表环境
MySQL数据库中通过SELECT语句查询数据, 该语句支持添加多种条件与参数,语句的基础格式如下所示。


下面详细讲解 SELECT 语句的使用方法。
在讲解查询语句前,首先创建 4 个数据表并插入数据,用于后面例题的演示。为了与前面章节中创建的表进行区分,这里将新建一个名为 Chapter_Four 的数据库,并在该库中分别创建学生表 student、课程表 course、成绩表 score 和老师表 teacher,其中学生表 student 的结构如表所示。


创建数据库 Chapter_Four,具体的 SQL 语句如下所示。


根据表中提供的表结构在 Chapter_Four 库中创建学生表,具体的 SQL 语句如下所示。


student 表创建完成后,接下来便可以将数据插入表。此处根据表所示的数据内容进行操作,读者也可以自定义表中的数据。


根据表提供的信息将相关数据插入表,具体的 SQL 语句如下所示。


学生表创建完成后,接下来创建课程表 course,其结构如表所示。


创建课程表 course,具体的 SQL 语句如下所示。


表中列出了课程表 course 的字段、字段类型和说明,接下来根据表所示的内容将数据插入课程表 course。 course 表内容如表所示。


接下来将相关数据插入课程表,具体的 SQL 语句如下所示。


课程表创建完成后,接下来创建成绩表 score,表结构如表。


表内容如表所示。


根据表创建相关表,具体的 SQL 语句如下所示。


根据表提供的内容将数据插入成绩表,具体的 SQL 语句如下所示。


最后创建老师表 teacher,表结构如表所示,表内容如表所示。




根据表提供的表结构创建 teacher 表,具体 SQL 语句如下所示。


根据表提供的表内容向 teacher 表中插入数据,具体 SQL 语句如下所示。


数据插入成功后使用 SHOW 命令查看创建完成的表。


至此, 4 张表创建完成,下面将针对这些表进行相关的查询操作。
查询表中所有字段对应的数据就相当于查询整个表,其语法有以下两种格式。
1.格式一


在以上语法格式中,如果查询时指定的字段顺序与数据表中的字段顺序不一致,那么查询出来的结果集会按指定的字段顺序显示。
接下来通过具体实例演示这种情况。
查询 student 表中的数据,并将查询结果集按照与数据表中字段顺序相反的顺序显示。从上方语句的执行结果可以看出, student 表中字段的顺序为 sid、 sname、 age、 gender。


从上方语句的执行结果可以看出, student 表中字段的顺序为 sid、 sname、 age、 gender。
接下来将对字段进行相反的排序。


从以上执行结果可看到, student 表中的数据都被查询并显示出来,显示的字段顺序与数据表中字段顺序相反。
2.格式二
在格式一中,如果表中存在较多的字段,查询表内容时会比较烦琐,而且出错的概率也比较大。因此, MySQL 提供了通配符“*”来代替所有的字段名,便于书写 SQL 语句。具体的语句格式如下所示。


接下来将通过具体实例演示 SELECT 语句中通配符的使用。


从以上结果可以看出使用通配符查询出了表中的数据。需要注意,这种查询方式虽然简单快捷,但是不能自定义字段的位置。
SELECT 语句不仅可以查看所有字段值,而且还可以查询表中指定字段对应的值,语法格式如下所示。


下面通过具体实例演示使用 SELECT 语句查询指定字段。


从以上执行结果可看到,查询出的结果集中只存在 sid 和 score 两个字段,证明指定字段查询成功。
条件查询
MySQL 支持通过在句中加入条件选项查询指定数据,如某个年龄段的学生、分数在某个区间的学生等。接下来详细介绍条件查询语句的使用方法。
Ø关系运算符
在 SELECT 语句中可以使用 WHERE 子句指定查询条件,从而查询出筛选后的数据,语法格式如下所示。


语法格式中,“字段名 1,字段名 2,…”表示需要查询的字段名称,条件表达式表示过滤筛选数据的条件。 MySQL 中提供了一系列关系运算符,这些关系运算符可以用在条件表达式中过滤数据。常见的关系运算符如表所示。


表中列出了常见的关系运算符,其中“!=”和“<>”都表示不等于,但由于有些关系型数据库不支持“!=”运算符,因此在 MySQL 中建议使用“<>”运算符。下面将通过具体实例演示关系运算符的基本使用方法。


从以上执行结果可看出,表 student 中男性学生为 6 名。在例中,因为 gender 字段为字符串类型,为了保持输出一致,需在查询条件的字符串上使用单引号。
Ø 多条件查询
在查询数据时常常会遇到需要查询满足多个条件的数据,接下来将详细介绍多条件查询语句中的关键字和使用方法。
1.AND 关键字
在 MySQL 中使用 SELECT 查询满足多种条件的数据时,可以用 AND 关键字连接查询条件,具体语法格式如下所示。


上述语法格式中, WHERE 子句后可以写多个条件表达式,表达式之间用 AND 连接。下面通过具体实例演示 AND 关键字的使用方法。
题目中存在 3 个条件, 分别为年龄大于 20、 年龄小于 23 和学生性别为女性, 所以需要在 WHERE子句中使用两个 AND 关键字进行条件连接,具体 SQL 语句如下所示。


以上查询结果显示, student 表中年龄在 20~23 岁且是女学生的有 4 位。
2.OR 关键字
AND 关键字表示“与”( &),即同时满足多个条件。 MySQL 还提供了 OR 关键字,表示“或”( ||),也可以连接多个查询条件,但是过滤时只要满足其中一个查询条件即可,具体语法格式如下所示。


下面将通过具体实例介绍 OR 关键字的使用方法。


从以上执行结果可看到,因为在 student 表中不存在年龄大于 25 岁的学生,所以只查出了两条年龄小于 20 岁的学生信息。
3.IN 和 NOT IN 关键字
MySQL 提供了 IN 关键字和 NOT IN 关键字,用于判断某个字段是否在指定集合中,如果不满足条件,数据则会被过滤掉,具体语法格式如下所示。


语法格式中, WHERE 子句中的字段名表示要过滤的字段。 [NOT]为可选项,表示不在集合范围中。下面通过具体实例来演示 IN 关键字和 NOT IN 关键字的用法。
在 student 表中查询学号为 1001、 1002 和 1003 的学生信息。


从以上执行结果可看到,使用 IN 关键字查出了学号为 1001、 1002 和 1003 的学生信息。
在 student 表中查询学号不为 1001、 1002 和 1003 的学生信息。


从以上执行结果可看到,使用 NOT IN 关键字查出了学号不为 1001、 1002 和 1003 的学生信息。
4.IS NULL 和 IS NOT NULL 关键字
在数据表中可能存在空值 NULL,空值 NULL 与 0 不同,也不同于空字符串。 IS NULL 关键字表示是空值, IS NOT NULL 关键字表示不为空值。因与 IN、 NOT IN 使用方式类似,所以此处不再通过实例演示其用法,读者可以自行操作。
5.BETWEEN AND 和 NOT BETWEEN AND 关键字
BETWEEN AND 关键字用于判断某个字段的值是否在指定范围内,若不在指定范围内,则会被过滤掉。 NOT BETWEEN AND 则表示在指定范围内的数据会被过滤掉。具体语法格式如下所示。


下面通过具体实例来演示 BETWEEN AND 关键字的用法。


6.LIKE 关键字
在实际的应用场景中,查询数据往往需要使用模糊查询,例如,查询名字中带有某个字母的学生。 MySQL 提供了 LIKE 关键字来对数据进行模糊查询,其语法格式如下所示。


语法格式中, NOT 为可选项,使用 NOT 时表示查询与字符串不匹配的值。“匹配字符串”用来指定要匹配的字符串,它可以是一个普通字符串,也可以是包含百分号( %)和下画线( _)的通配符字符串,其中百分号表示任意 0~ n 个字符,下画线表示任意一个字符。
接下来通过具体实例演示 LIKE 关键字的使用方法。


在查询语句中使用 5 个下画线对字符进行了占位,从语句的执行结果可以看出,查询结果中的学生姓名都为 5 个字母。
接着查询姓名由五个字母构成,并且第三个字母为“w”的学生信息, SQL 语句如下所示。


查询姓名中包含字母“m”的学生信息, SQL 语句如下所示。


上方的查询语句中,使用字母“m”代表名字中含有字母“m”,使用两个百分号表示字母“m”的前面和后面有任意个字符。从语句的执行结果可看出,名字中包含字母“m”的学生为 moyan。
7.DISTINCT 关键字
MySQL 提供了 DISTINCT 关键字,用于去除重复数据,其具体语法格式如下所示。


下面通过具体的实例演示 DISTINCT 关键字的使用方法。


从上方语句的执行结果可以看出, score 表中分数相同的字段已经被过滤。需要注意, DISTINCT关键字只可以在 SELECT 语句中使用,其主要作用就是对数据库表中一个或者多个字段的重复数据进行过滤,并返回其中的一条数据给用户。
高级查询
大多数情况下,基础查询和条件查询可以处理大部分业务需求。但当需要对查询结果进行排序、分组和分页时,用这两种查询方式很难处理,此时需要使用更加高级的语句来完成。下面详细讲解MySQL 的高级查询语句。
Ø 排序查询
数据查询完成后,查询结果会按默认的顺序进行排序。用户如果想自定义输出结果的顺序,就需要在语句中加入 ORDER BY 关键字,其具体的语法格式如下所示。


语法格式中,“字段名 1,字段名 2,…”是要查询的字段, ORDER BY 关键字后的字段名是指定排序的字段。 ASC 和 DESC 是可选参数,其中 ASC 表示按升序排序, DESC 表示按降序排序,如果不写该参数,则默认按升序排序。
接下来将通过具体实例演示排序查询。
将 score 表中的数据按照 score 字段从大到小的顺序进行排列。


从以上语句的执行结果可以看出,查询结果中的学生成绩已经按照 score 字段的降序规则进行排列。另外,从查询结果可以看出存在分数相同的项,此时,可在规定按分数降序排列后,将分数相同的项按照课程编号( cid)升序排列,具体的 SQL 语句如下所示。


从以上执行结果可看出,查询出的学生成绩信息首先按分数进行了降序排列,如果出现分数相同的情况,则按照课程编号( cid)升序排列。这就是按多个字段进行排序的情况。

Ø 聚合函数
在查询出数据之后,可能需要对数据进行统计,求分数的总和、分数的最大值、分数的平均值等。 MySQL 提供了一系列函数来实现数据统计,称为聚合函数,如表所示。


表中列出了聚合函数的名称和作用,接下来将详细讲解这些函数的用法。
1.COUNT()函数
COUNT()函数的语法格式如下所示。


在以上语法格式中, COUNT()函数中有 3 个可选参数,其中“*”是返回行数,包含 NULL;“列名”指定特定的列,不包含 NULL; COUNT(1)与 COUNT(*)返回的结果是一样的,如果数据表没有主键,则 COUNT(1)的执行效率会高一些。
接下来通过具体实例演示 COUNT()函数的使用方法。


从以上执行结果可看到, score 表中一共有 20 条记录。另外,还可以在语句中使用 AS 参数为列起别名, SQL 语句如下所示。


从以上执行结果可看出,结果集中不仅统计出了成绩表的记录数,还将列名设置为了 test。使用AS 参数为统计结果设置别名,有利于后期数据的维护和管理。需要注意,在取别名时, AS 是可以省略不写的,具体语句如下所示。


从上方语句的执行结果可以看出, AS 省略后并不影响为列定义别名。

2.SUM()函数
SUM()函数用于计算表中指定列的数值和,需要注意,如果指定列的类型不是数值类型,那么计算结果将为 0。 SUM()函数的具体语法格式如下所示。


接下来通过具体实例演示 SUM()函数的使用。


从以上执行结果可看出, cid 为 2 的分数总和为 163 分。
3.AVG()函数
AVG()函数用于计算指定列的平均值。需要注意,如果指定列类型不是数值类型,那么计算结果将为 0。具体语法格式如下所示。


接下来通过具体实例演示AVG()函数的使用。


从以上执行结果可看出, “电子信息技术”这门课程的平均分为 66.25 分。
4.MAX()函数和 MIN()函数
MAX()函数用于计算指定列的最大值, MIN()函数用于计算指定列的最小值。需要注意,如果指定列的属性为字符串类型,系统将使用字符串排序规则。具体语法格式如下。


接下来通过具体实例演示 MAX()函数的使用。


从以上执行结果可看出, “计算机网络原理”这门课程的最高分为 92 分,最低分为 66 分。
Ø 分组查询
在查询数据时,有时需要按照一定的类别进行统计,如查询某位老师所教学生的人数等。在MySQL 中可以使用 GROUP BY 关键字进行分组查询,语法格式如下所示。


上面的语法格式中, GROUP BY 后的字段名是对查询结果分组的依据,一般会和聚合函数一起使用。
接下来通过具体实例演示 GROUP BY 的使用。


从以上执行结果可看出, student 表中男生的数量为 5 位,女生的数量为 6 位。
Ø HAVING字句
在一些情况下,对复杂的数据进行分组查询后,还需要进行数据过滤。 MySQL 提供了 HAVING关键字,用于在分组后对数据进行过滤。需要注意, HAVING 关键字后面可以使用聚合函数,其语法格式如下所示。


上面的语法格式中, HAVING 子句为可选项。
接下来通过具体实例演示 HAVING 子句的使用。


从以上执行结果可以看出, score 表中课程数大于 2 的学生学号为 1003 和 1009。

Ø LIMIT分页
在查询数据表时,如果不指定显示数量,默认情况下会将全部结果显示出来,这种查询方式明显会影响程序性能。为了解决这一问题, MySQL 提供了 LIMIT 关键字,用于限制查询结果的显示数量。 LIMIT 关键字可以实现数据的分页显示,例如,在购物网站浏览商品时,商品信息会分页显示,这样不仅满足了用户需求,而且也不影响系统的性能。 LIMIT 的语法格式如下所示。


上面的语法格式中, LIMIT 关键字后的第一个参数 m 为可选项,代表起始索引,若不指定该值,则使用默认值 0,代表第一条记录;第二个参数 n 为必选项,代表从第 m+1 条记录开始取 n 条记录。
接下来通过具体实例演示 LIMIT 的使用。


从以上执行结果可看出, LIMIT 关键字后指定从索引 0 开始取 5 条记录,查出了前 5 条学生记录。当从索引 0 开始查询时, 0 也可以省略不写。
回复

使用道具 举报

1

主题

5

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2025-6-5 14:14:33 | 显示全部楼层
支持你哈...................................
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表