138 张图带你 MySQL 入门(3)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 138 张图带你 MySQL 入门(3)

聚合


下面我们来看一下对记录进行汇总的操作,这类操作主要有


  • 汇总函数,比如 sum 求和、count 统计数量、max 最大值、min 最小值等


  • group by,关键字表示对分类聚合的字段进行分组,比如按照部门统计员工的数量,那么 group by 后面就应该跟上部门


  • with 是可选的语法,它表示对汇总之后的记录进行再次汇总


  • having 关键字表示对分类后的结果再进行条件的过滤。


看起来 where 和 having 意思差不多,不过它们用法不一样,where 是使用在统计之前,对统计前的记录进行过滤,having 是用在统计之后,是对聚合之后的结果进行过滤。也就是说 where 永远用在 having 之前,我们应该先对筛选的记录进行过滤,然后再对分组的记录进行过滤。



可以对 job 表中员工薪水进行统计,选出总共的薪水、最大薪水、最小薪水


select sum(salary) from job;


image.png


比如我们要统计 job 表中人员的数量


select count(1) from job;


统计完成后的结果如下


image.png


我们可以按照 job 表中的年龄来进行对应的统计


select age,count(1) from job group by age;


image.png


在此基础上进行分组,统计数量大于 1 的记录


select age,count(1) from job group by age with rollup having count(1) > 1;


image.png


表连接


表连接一直是笔者比较痛苦的地方,曾经因为一个表连接挂了面试,现在来认真撸一遍。


表连接一般体现在表之间的关系上。当需要同时显示多个表中的字段时,就可以用表连接来实现。


为了演示表连接的功能,我们为 job 表加一个 type 字段表示工作类型,增加一个 job_type 表表示具体的工作种类,如下所示


image.png


下面开始我们的演示


查询出 job 表中的 type 和 job_type 表中的 type 匹配的姓名和工作类型


select job.name,job_type.name from job,job_type where job.type = job_type.type;


image.png


上面这种连接使用的是内连接,除此之外,还有外连接。那么它们之间的区别是啥呢?


内连接:选出两张表中互相匹配的记录;

外连接:不仅选出匹配的记录,也会选出不匹配的记录;

外连接分为两种


  • 左外连接:筛选出包含左表的记录并且右表没有和它匹配的记录



  • 右外连接:筛选出包含右表的记录并且左表没有和它匹配的记录


为了演示效果我们在 job 表和 job_type 表中分别添加记录,添加完成后的两表如下


image.png


下面我们进行左外连接查询:查询出 job 表中的 type 和 job_type 表中的 type 匹配的姓名和工作类型


select job.name,job_type.name from job left join job_type on job.type = job_type.type;


查询出来的结果如下


image.png


可以看出 cxuan06 也被查询出来了,而 cxuan06 他没有具体的工作类型。


使用右外连接查询


select job.name,job_type.name from job right join job_type on job.type = job_type.type;


image.png


可以看出,job 表中并没有 waiter 和 manager 的角色,但是也被查询出来了。


子查询


有一些情况,我们需要的查询条件是另一个 SQL 语句的查询结果,这种查询方式就是子查询,子查询有一些关键字比如 「in、not in、=、!=、exists、not exists」 等,例如我们可以通过子查询查询出每个人的工作类型


select job.* from job where type in (select type from job_type);


image.png


在某些情况下,子查询可以转换为表连接


联合查询


我们还经常会遇到这样的场景,将两个表的数据单独查询出来之后,将结果合并到一起进行显示,这个时候就需要 UNION 和 UNION ALL 这两个关键字来实现这样的功能,UNION 和 UNION ALL 的主要区别是 UNION ALL 是把结果集直接合并在一起,而 UNION 是将 UNION ALL 后的结果进行一次 DISTINCT 去除掉重复数据。


比如


select type from job union all select type from job_type;


它的结果如下


image.png


上述结果是查询 job 表中的 type 字段和 job_type 表中的 type 字段,并把它们进行汇总,可以看出 UNION ALL 只是把所有的结果都列出来了


使用 UNION 的 SQL 语句如下


select type from job union select type from job_type;


image.png


可以看出 UNION 是对 UNION ALL 使用了 distinct 去重处理。

            </div>
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
SQL 存储 自然语言处理
42 张图带你撸完 MySQL 优化 下
42 张图带你撸完 MySQL 优化 下
119 0
42 张图带你撸完 MySQL 优化  下
|
SQL 存储 关系型数据库
42 张图带你撸完 MySQL 优化 上
42 张图带你撸完 MySQL 优化 上
93 0
42 张图带你撸完 MySQL 优化  上
|
SQL 存储 关系型数据库
42 张图带你撸完 MySQL 优化 中
42 张图带你撸完 MySQL 优化 中
128 0
42 张图带你撸完 MySQL 优化  中
|
SQL Oracle 关系型数据库
138 张图带你 MySQL 入门(2)
138 张图带你 MySQL 入门(2)
99 0
138 张图带你 MySQL 入门(2)
|
存储 SQL 缓存
47 张图带你 MySQL 进阶!!!(一)
主要介绍了基本的 SQL 命令、数据类型和函数,在具备以上知识后,你就可以进行 MySQL 的开发工作了,但是如果要成为一个合格的开发人员,你还要具备一些更高级的技能,下面我们就来探讨一下 MySQL 都需要哪些高级的技能
138 0
47 张图带你 MySQL 进阶!!!(一)
|
存储 SQL 安全
138 张图带你 MySQL 入门(6)
138 张图带你 MySQL 入门(6)
66 0
138 张图带你 MySQL 入门(6)
|
SQL 存储 关系型数据库
138 张图带你 MySQL 入门(4)
138 张图带你 MySQL 入门(4)
84 0
138 张图带你 MySQL 入门(4)
|
SQL 关系型数据库 MySQL
138 张图带你 MySQL 入门(5)
138 张图带你 MySQL 入门(5)
81 0
138 张图带你 MySQL 入门(5)
|
SQL 存储 关系型数据库
138 张图带你 MySQL 入门(1)
138 张图带你 MySQL 入门(1)
123 0
138 张图带你 MySQL 入门(1)
|
SQL 存储 关系型数据库
47 张图带你 MySQL 进阶!!!(五)
主要介绍了基本的 SQL 命令、数据类型和函数,在具备以上知识后,你就可以进行 MySQL 的开发工作了,但是如果要成为一个合格的开发人员,你还要具备一些更高级的技能,下面我们就来探讨一下 MySQL 都需要哪些高级的技能
96 0
47 张图带你 MySQL 进阶!!!(五)