138 张图带你 MySQL 入门(3)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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 去重处理。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
安全 关系型数据库 MySQL
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
|
7月前
|
存储 监控 关系型数据库
轻松入门Mysql:MySQL性能优化与监控,解锁进销存系统的潜力(23)
轻松入门Mysql:MySQL性能优化与监控,解锁进销存系统的潜力(23)
128 0
|
7月前
|
SQL 数据可视化 关系型数据库
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
640 0
|
7月前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
159 0
|
7月前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:MySQL 备份与恢复,保护数据安全,提高工作效率(20)
轻松入门MySQL:MySQL 备份与恢复,保护数据安全,提高工作效率(20)
116 0
|
3月前
|
关系型数据库 MySQL 数据库
MySQL基本操作入门指南
MySQL基本操作入门指南
94 0
|
7月前
|
存储 关系型数据库 MySQL
MySQL基础入门:数据库操作全攻略
MySQL基础入门:数据库操作全攻略
165 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL入门到精通
MySQL入门到精通
|
5月前
|
SQL 关系型数据库 MySQL
「Python入门」python操作MySQL和SqlServer
**摘要:** 了解如何使用Python的pymysql模块与MySQL数据库交互。首先,通过`pip install pymysql`安装模块。pymysql提供与MySQL的连接功能,例如创建数据库连接、执行SQL查询。在设置好MySQL环境后,使用`pymysql.connect()`建立连接,并通过游标执行SQL(如用户登录验证)。注意防止SQL注入,使用参数化查询。增删改操作需调用`conn.commit()`来保存更改。pymssql模块类似,但导入和连接对象创建略有不同。
66 0
「Python入门」python操作MySQL和SqlServer
|
5月前
|
SQL 关系型数据库 MySQL
【MySQL从入门到精通】常用SQL语句分享
【MySQL从入门到精通】常用SQL语句分享
63 2