开发者社区> 陶然同学> 正文

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

简介: 呕心沥血写了三天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='男';


image查询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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
21045 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
30427 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
23156 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
17513 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
21361 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23639 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14929 0
+关注
陶然同学
CSDN优质博主
108
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载