MySQL超详细学习教程,2023年硬核学习路线(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL超详细学习教程,2023年硬核学习路线(二)

8. DQL- 数据的查询操作


查询是数据操作至关重要的一部分,比如说在所有商品中查找出价格在规定范围内的所有商品,要想把数据库中的数据在客户端中展示给用户,一般都进行了查询的操作。

在实际开发中,我们要根据不同的需求,并且考虑查询的效率来决定怎样进行查询,学习查询前,可以先看看查询的完整语法:

SELECT
  字段列表
FROM
  表名列表
WHERE
  条件列表
GROUP BY
  分组字段
HAVING
  分组后条件
ORDER BY
  排序字段
LIMIT
  分页限定


根据查询的完整语法中的关键字,我们分别来学习基础查询,条件查询,排序查询,分组查询和分页查询。

下面的练习中使用以下的案例学习单表查询:


-- 删除stu表
drop table if exists stu;
-- 创建stu表
CREATE TABLE stu (
id int, -- 编号
name varchar(10), -- 姓名
age int, -- 年龄
gender varchar(5), -- 性别
math double(5,2), -- 数学成绩
english double(5,2) -- 英语成绩
);
-- 添加数据
INSERT INTO stu(id,name,age,gender,math,english)
VALUES
(1,'小张',23,'男',66,78),
(2,'小李',20,'女',98,87),
(3,'小陈',55,'男',56,77),
(4,'小樊',20,'女',76,65),
(5,'小马',20,'男',86,NULL),
(6,'小赵',57,'男',99,99);


在Navicat中选中SQL并执行:

1.1.png

8.1 基础查询


1. 基础查询语法


查询多个字段:

select 字段列表 from 表名;


查询全部字段:

select * from 表名;


去除重复记录:

select distinct 字段列表 from 表名;


起别名操作:

select 字段名 别名 from 表名;


2. 基础查询练习


使用学生表进行基础查询练习:

查询多个字段的练习:

select name,math from stu;

1.2.png

起别名操作练习:

select name,english 英语成绩 from stu;

1.3.png

8.2 条件查询


1. 条件查询语法


一般语法:

select 字段列表 from 表名 where 条件列表;


条件查询一般配合运行符进行,下面是常见的几个运算符:

运算符

功能描述
> < = ! 大于 小于 等于 不等于
between…and… 在这个范围之内
in(…)

多选一

is null / is not null

是null / 不是null

and 或 &&

并且

or 或 || 或者

2. 条件查询练习


使用学生表进行条件查询练习:

查询年龄大于20的学生信息:


select * from stu where age>20;

1.4.png


查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于21岁的学生信息:


select * from stu where age in(18,20,21);

1.5.png


模糊查询使用like关键字,可以使用通配符进行占位:

_ : 代表单个任意字符

% : 代表任意个数字符


查询姓名中含有张的学生信息:

select * from stu where name like '%张%';

1.6.png

8.3 排序查询


1. 排序查询语法


select 字段列表 from 表名 order by 排序字段名1 [排序方式]...;


注:排序方式有两种:分别是升序ASC和降序DESC,默认情况下是升序ASC。

2. 排序查询练习


使用学生表进行排序查询练习:

查询学生信息,按照数学成绩降序排列:

select * from stu order by math DESC;


8.4 聚合函数


1. 聚合函数语法


什么是聚合函数呢?在进行查询操作时,往往需要对一整列进行运算,例如可以计算一整列成绩数据的平均值,我们就要使用聚合函数。下面是常见的聚合函数:

函数名

功能

count(列名)

统计数量(一般选用不为null的列)

max(列名)

最大值

min(列名)

最小值

sum(列名)

求和

avg(列名)

平均值


一般语法:

select 聚合函数 from 表名;


注:NULL值不参与聚合函数运算。

2.聚合函数练习


使用学生表进行聚合函数的练习:

统计该表中一共有几个学生:

select count(id) from stu;

1.7.png

上面我们使用某一字段进行运算,这样做可能面临的问题是某一个值可能是NULL,所以我们一般使用 * 进行运算,因为一行中不可能所有的字段都是NULL。

select count(*) from stu;


查询数学成绩的平均分:

select avg(math) from stu;

1.8.png

8.5 分组查询


1. 分组查询语法


select 字段列表 from 表名 [where 分组前的条件限定] group by 分组字段名 [having 分组后的条件过滤]


注:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义。

2. 分组查询练习


使用学生表进行分组查询练习:

查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组:

select gender, avg(math),count(*) from stu where math > 70 group by gender;

1.9.png

查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的:

select gender, avg(math),count(*) from stu where math > 70 group by gender having count(*) > 2;

1.10.png

注:where 和 having 执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。所以,where 不能对聚合函数进行判断,having 可以。

8.6 分页查询


1. 分页查询语法


在我们的印象中,网页在展示大量的数据时,往往不是把数据一下全部展示出来,而是用分页展示的形式,其实就是对数据进行分页查询的操作,即每次只查询一页的数据展示到页面上。

select 字段列表 from 表名 limit 查询起始索引,查询条目数;


在 limit 关键字中,查询起始索引这个参数是从0开始的。

2. 分页查询练习


使用学生表进行分页查询练习:

从0开始查询,查询3条数据:

select * from stu limit 0,3;

1.11.png


起始索引 = (当前页码 - 1) * 每页显示的条数

在SQL标准中,一共规定了6种不同的约束,包括非空约束,唯一约束和检查约束等,而在MySQL中是不支持检查约束的,所以这篇文章先对其余5种约束做一个详解和练习。

9. 约束的概念


约束是作用于表中列上的规则,用于限制加入表的数据。例如,作为主键的列一定是非空的唯一的,否则将无法对数据进行区分。约束的存在保证了数据库中数据的正确性、有效性和完整性。所以约束在数据库设计中是非常重要的。

10. 约束的分类


前面说到SQL标准把约束分为了6大类,分别是非空约束,唯一约束,主键约束,检查约束,默认约束和外键约束,添加约束时我们只需要在SQL中添加关键词,便可以限制表中的数据。


约束类型

功能

非空约束 NOT NULL

保证列中所有的数据不能有null值

唯一约束 UNIQUE

保证列中所有数据各不相同

主键约束 PRIMARY KEY

主键是一行数据的唯一标识,要求非空且唯一

检查约束 CHECK

保证列中的值满足某一条件

默认约束 DEFAULT

保存数据时,未指定值则采用默认值

外键约束 FOREIGN KEY

外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性

11. 非空约束


目的:保证列中所有的数据不能有null值

添加约束:


CREATE TABLE 表名(
  列名 数据类型 NOT NULL,
);


建完表后添加非空约束:

ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL;


删除约束:

ALTER TABLE 表名 MODIFY 字段名 数据类型;


12. 唯一约束


目的:保证列中所有数据各不相同

添加约束:

CREATE TABLE 表名(
  列名 数据类型 UNIQUE [AUTO_INCREMENT],
  -- AUTO_INCREMENT: 当不指定值时自动增长
);
CREATE TABLE 表名(
  列名 数据类型,
  [CONSTRAINT] [约束名称] UNIQUE(列名)
);


建完表后添加唯有约束:

ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE;


删除约束:


ALTER TABLE 表名 DROP INDEX 字段名;


13. 主键约束


目的:主键是一行数据的唯一标识,要求非空且唯一

添加约束:

CREATE TABLE 表名(
  列名 数据类型 PRIMARY KEY [AUTO_INCREMENT],
);
CREATE TABLE 表名(
  列名 数据类型,
  [CONSTRAINT] [约束名称] PRIMARY KEY(列名)
);


建完表后添加主键约束:

ALTER TABLE 表名 ADD PRIMARY KEY(字段名);


删除约束:

ALTER TABLE 表名 DROP PRIMARY KEY;


14. 默认约束


目的:保存数据时,未指定值则采用默认值

添加约束:

CREATE TABLE 表名(
  列名 数据类型 DEFAULT 默认值,
);


建完表后添加默认约束:

ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值;


删除约束:

ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
26天前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
45 3
|
16天前
|
存储 SQL 关系型数据库
【入门级教程】MySQL:从零开始的数据库之旅
本教程面向零基础用户,采用通俗易懂的语言和丰富的示例,帮助你快速掌握MySQL的基础知识和操作技巧。内容涵盖SQL语言基础(SELECT、INSERT、UPDATE、DELETE等常用语句)、使用索引提高查询效率、存储过程等。适合学生、开发者及数据库爱好者。
34 0
【入门级教程】MySQL:从零开始的数据库之旅
|
1月前
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
21天前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
54 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
22天前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
35 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
22天前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
17 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
25天前
|
关系型数据库 MySQL 数据库
mysql关系型数据库的学习
mysql关系型数据库的学习
17 0
|
1月前
|
Kubernetes 关系型数据库 MySQL
k8s学习--利用helm部署应用mysql,加深helm的理解
k8s学习--利用helm部署应用mysql,加深helm的理解
120 0
|
22天前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
96 6
|
20天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
55 3
Mysql(4)—数据库索引