138 张图带你 MySQL 入门(3)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 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 去重处理。

            </div>
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
1天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
245 116
|
16天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
10天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
637 220
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
867 61
|
8天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1397 157
|
6天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
267 139
|
8天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
567 109