呕心沥血写了三天3两夜24k字的MySQL详细教程(三)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 呕心沥血写了三天3两夜24k字的MySQL详细教程(三)

第四章 DQL语句


4.1条件查询


4.1.1 比较运算符


>大于 <小于 <=小于等于 >=大于等于 =等于 <>、!=不等于


具体操作:查询math分数大于80分的学生


SELECT * FROM student3 WHERE math>80;

微信图片_20220524223100.png

查询english分数小于或等于80分的学生

SELECT * FROM student3 WHERE english<=80;

微信图片_20220524222818.png

查询english分数小于或等于80分的学生

SELECT * FROM student3 WHERE english<=80;


微信图片_20220524222841.png

查询age等于20岁的学生

SELECT * FROM student3 WHERE age=20;

微信图片_20220524222902.png


查询age不等于20岁的学生

SELECT * FROM student3 WHERE age!=20;
SELECT * FROM student3 WHERE age<>20;

微信图片_20220524222908.png

   4.1.2 逻辑运算符


and(&&) 多个条件同时满足 or(||) 多个条件其中一个满足 not(!) 不满足

具体操作:查询age大于35且性别为男的学生(两个条件同时满足)

SELECT * FROM student3 WHERE age>35 AND sex='男';

微信图片_20220524224044.png

查询age大于35或性别为男的学生(两个条件其中一个满足)

SELECT * FROM student333 WHERE age>35 OR sex='男';


查询id是1或3或5的学生

SELECT * FROM student3 WHERE id=1 OR id=3 OR id=5;

微信图片_20220524222926.png

in关键字 语法格式:SELECT 字段名 FROM 表名 WHERE 字段 in (数据1, 数据2...); in里面的每个数据都会作为一次条件,只要满足条件的就会显示

具体操作:查询id是1或3或5的学生

SELECT * FROM student3 WHERE id IN (1,3,5);

查询id不是1或3或5的学生

SELECT * FROM student3 WHERE id NOT IN (1,3,5);


微信图片_20220524222932.png


4.1.3 范围


BETWEEN 值1 AND 值2 表示从值1到值2范围,包头又包尾 比如:age BETWEEN 80 AND 100 相当于: age>=80 &&age<=100

具体操作:查询english成绩大于等于75,且小于等于90的学生

SELECT * FROM student3 WHERE english>=75 AND english<=90;
SELECT * FROM student3 WHERE english BETWEEN 75 AND 90;

微信图片_20220524222938.png

4.1.4 like


LIKE表示模糊查询 SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串'; 满足通配符字符串规则的数据就会显示出来 所谓的通配符字符串就是含有通配符的字符串 MySQL通配符有两个: %: 表示0个或多个字符(任意个字符) _: 表示一个字符

具体操作:查询姓马的学生

SELECT * FROM student3 WHERE NAME LIKE '马%';

微信图片_20220524222944.png

查询姓名中包含'德'字的学生

SELECT * FROM student3 WHERE NAME LIKE '%德%';

查询姓马,且姓名有三个字的学生

SELECT * FROM student3 WHERE NAME LIKE '马__';

微信图片_20220524222952.png 4.2排序


通过ORDER BY子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序) SELECT字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC]; ASC: 升序, 默认是升序 DESC: 降序

 4.2.1单列排序


单列排序就是使用一个字段排序

具体操作:查询所有数据,使用年龄降序排序

SELECT * FROM student3 ORDER BY age DESC;



微信图片_20220524222958.png

4.2.2组合排序


组合排序就是先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序,依次类推。 上面的例子中,年龄是有相同的。当年龄相同再使用math进行排序 SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名1 [ASC|DESC], 字段名2 [ASC|DESC];

具体操作:查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩降序排序

SELECT * FROM student3 ORDER BY age DESC, math DESC;


微信图片_20220524223011.png


4.3 聚合函数


之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值。另外聚合函数会忽略空值

五个聚合函数: count: 统计指定列记录数,记录为NULL的不统计 sum: 计算指定列的数值和,如果不是数值类型,那么计算结果为0 max: 计算指定列的最大值 min: 计算指定列的最小值 avg: 计算指定列的平均值,如果不是数值类型,那么计算结果为0

聚合函数的使用:写在 SQL语句SELECT后 字段名的地方 SELECT 字段名... FROM 表名; SELECT COUNT(age)FROM 表名;

具体操作:查询学生总数

SELECT COUNT(english) FROM student3;


微信图片_20220524223019.png

我们发现对于NULL的记录不会统计

微信图片_20220524223026.png

image.png

我们可以利用IFNULL()函数,如果记录为NULL,给个默认值,这样统计的数据就不会遗漏

ELECT COUNT(IFNULL(english,0)) FROM student3;

image.png

SELECT COUNT(*) FROM student3;


image.png

查询年龄大于40的总数

SELECT COUNT(*) FROM student3 WHERE age>40;

image.png

查询数学成绩总分

SELECT SUM(math) FROM student3;

微信图片_20220524230200.png

查询数学成绩平均分

SELECT AVG(math) FROM student3;

微信图片_20220524230228.png查询数学成绩最高分

SELECT MAX(math) FROM student3;



微信图片_20220524230234.png

查询数学成绩最低分

SELECT MIN(math) FROM student3;

微信图片_20220524230239.png

  4.4 分组


分组查询是指使用 GROUP BY语句对查询信息进行分组,相同数据作为一组 SELECT 字段1,字段2... FROM 表名GROUP BY 分组字段 [HAVING 条件];GROUP BY怎么分组的?将分组字段结果中相同内容作为一组 SELECT * FROM student3 GROUP BY sex;这句话会将sex相同的数据作为一组微信图片_20220524230919.png

GROUP BY将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。分组的目的就是为了统计,一般分组会跟聚合函数一起使用。分组后聚合函数的作用/?不是操作所有数据,而是操作一组数据。 SELECT SUM(math), sex FROM student3 GROUPBY sex; 效果如下:

微信图片_20220524230927.png

实际上是将每组的math进行求和,返回每组统计的结果 微信图片_20220524230932.png

注意事项:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的查询的时候没有查询出分组字微信图片_20220524230940.png

查询的时候查询出分组字段

微信图片_20220524230946.png

具体步骤:按性别分组

SELECT sex FROM student3 GROUP BY sex;

微信图片_20220524230950.png微信图片_20220524230950.png

查询男女各多少人

.查询所有数据,按性别分组。 2.统计每组人数SELECT sex, COUNT(*) FROM student3 GROUP BY sex;

微信图片_20220524231006.png

查询年龄大于25岁的人,按性别分组,统计每组的人数


//

1.先过滤掉年龄小于25岁的人。2.再分组。3.最后统计每组的人数SELECT sex, COUNT(*) FROM student3 WHERE age > 25 GROUP BY sex;

微信图片_20220524231013.png查询年龄大于25岁的人,按性别分组,统计每组的人数,并只显示性别人数大于2的数据 有很多同学可能会将SQL语句写出这样:


SELECT sex, COUNT(*) FROM student3 WHERE age > 25 GROUP BY sex WHERE COUNT(*) >2;


注意: 并只显示性别人数>2的数据属于分组后的条件,对于分组后的条件需要使用having子句


SELECT sex, COUNT(*) FROM student3 WHERE age > 25 GROUP BY sex HAVING COUNT(*) >2;只有分组后人数大于2的`男`这组数据显示出来

微信图片_20220524231020.png

having与where的区别


       having是在分组后对数据进行过滤.


       where是在分组前对数据进行过滤


       having后面可以使用聚合函数


       where后面不可以使用聚合函数


准备数据:


INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (9,'唐僧',25,'男','长安',87,78),(10,'孙悟空',18,'男','花果山',100,66),(11,'猪八戒',22,'男','高老庄',58,78),(12,'沙僧',50,'男','流沙河',77,88),(13,'白骨精',22,'女','白虎岭',66,66),(14,'蜘蛛精',23,'女','盘丝洞',88,88);

 4.5 limit语句


LIMIT是限制的意思,所以LIMIT的作用就是限制查询记录的条数。 SELECT *|字段列表 [as 别名] FROM 表名[WHERE子句] [GROUP BY子句][HAVING子句][ORDER BY子句][LIMIT子句]; 思考:limit子句为什么排在最后? 因为前面所有的限制条件都处理完了,只剩下显示多少条记录的问题了!


LIMIT语法格式: LIMIT offset,length; 或者limit length; offset是指偏移量,可以认为是跳过的记录数量,默认为0 length是指需要显示的总记录数


具体步骤:查询学生表中数据,从第三条开始显示,显示6条


我们可以认为跳过前面2条,取6条数据
SELECT * FROM student3 LIMIT 2,6;

微信图片_20220524232128.png

LIMIT的使用场景:分页 比如我们登录京东,淘宝,返回的商品信息可能有几万条,不是一次全部显示出来。是一页显示固定的条数。 假设我们一每页显示5条记录的方式来分页,SQL语句如下:


‐ 每页显示5条
‐‐ 第一页: LIMIT 0,5; 跳过0条,显示5条
‐‐ 第二页: LIMIT 5,5; 跳过5条,显示5条
‐‐ 第三页: LIMIT 10,5; 跳过10条,显示5条
SELECT * FROM student3 LIMIT 0,5;SELECT * FROM student3 LIMIT 5,5;SELECT * FROM student3 LIMIT 10,5;

微信图片_20220524232137.png

注意:


       如果第一个参数是0可以简写:


       SELECT * FROM student3 LIMIT 0,5;


       SELECT * FROM student3 LIMIT 5;


LIMIT 10,5; -- 不够5条,有多少显示多少


第五章 数据库备份


5.1 备份应用场景


在服务器进行数据传输、数据存储和数据交换,就有可能产生数据故障。比如发生意外停机或存储介质损坏。这时,如果没有采取数据备份和数据恢复手段与措施,就会导致数据的丢失,造成的损失是无法弥补与估量的。


5.2 source命令备份与还原



备份格式: mysqldump -u用户名 -p密码 数据库 > 文件的路径


还原格式: SOURCE 导入文件的路径;


注意:还原的时候需要先登录MySQL,并选中对应的数据库


具体操作:备份day22数据库中的数据


mysqldump ‐uroot ‐proot day22 > C:\work\课改\MYSQL课改资料\Day02‐MYSQL多表查询\code\bak.sql

微信图片_20220524232456.png

数据库中的所有表和数据都会导出成SQL语句

微信图片_20220524232501.png

还原day22数据库中的数据

删除day22数据库中的所有表 微信图片_20220524232506.png登录MySQL

mysql ‐uroot ‐proot

选中数据库

use day22;
select database();

微信图片_20220524232512.png

使用SOURCE命令还原数据

source C:\work\课改\MYSQL课改资料\Day02‐MYSQL多表查询\code\bak.sql

 5.3 图形化界面备份与还原


备份day22数据库中的数据微信图片_20220524232518.png

包含创建数据库的语句

微信图片_20220524232523.png

微信图片_20220524232530.png

还原day22数据库中的数据

删除day22数据库

数据库列表区域右键“执行SQL脚本”, 指定要执行的SQL文件,执行即可 微信图片_20220524232536.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
关系型数据库 MySQL Java
centos7安装mysql教程及Navicat平替软件
【8月更文挑战第17天】本教程详述CentOS 7上安装MySQL的过程。首先确保移除任何预装的MySQL组件,然后通过wget获取并安装MySQL的YUM源。可以选择安装特定版本如5.7或8.0。安装MySQL服务器后,启动服务并查找初始密码。登录MySQL后应立即更改密码,并可根据需要设置远程访问权限。此外,还推荐使用免费开源的DBeaver作为数据库管理工具,提供了安装步骤以方便管理和操作MySQL数据库。
147 3
|
21天前
|
存储 SQL 关系型数据库
【入门级教程】MySQL:从零开始的数据库之旅
本教程面向零基础用户,采用通俗易懂的语言和丰富的示例,帮助你快速掌握MySQL的基础知识和操作技巧。内容涵盖SQL语言基础(SELECT、INSERT、UPDATE、DELETE等常用语句)、使用索引提高查询效率、存储过程等。适合学生、开发者及数据库爱好者。
35 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`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
3月前
|
SQL 关系型数据库 MySQL
PHP与MySQL交互之基础教程
【8月更文挑战第31天】 在数字世界中,数据是推动一切的核心力量。本文将引导你探索PHP与MySQL的协同工作,通过实际代码示例,展示如何建立连接、执行查询以及处理结果集。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你提供宝贵的实践知识。
|
3月前
|
关系型数据库 MySQL 网络安全
MySQL主从复制详细教程
配置MySQL的主从复制是一个细致的过程,需要仔细遵循上述步骤进行。一旦配置完成并运行正常,主从复制将大大提高数据库的可用性和读写性能。在操作过程中,务必保持谨慎,确保数据的一致性和安全性。
349 0
|
4月前
|
关系型数据库 MySQL Linux
Docker安装mysql详细教程, mysqld: Can‘t read dir of ‘/etc/mysql/conf.d/‘(报错已解决)
Docker安装mysql详细教程, mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 2 - No such file or directory) 已解决
|
4月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
286 3
|
4月前
|
存储 关系型数据库 MySQL
MySQL小白教程(进阶篇):数据管理与高级查询
MySQL小白教程(进阶篇):数据管理与高级查询
|
4月前
|
SQL 关系型数据库 MySQL
MySQL小白教程(进阶篇):深入理解SQL与数据管理
MySQL小白教程(进阶篇):深入理解SQL与数据管理
|
4月前
|
存储 关系型数据库 MySQL
MySQL小白教程:从入门到查询高手
MySQL小白教程:从入门到查询高手