MySQL --- 聚合查询 和 联合查询
聚合查询:
下文中的所有聚合查询的示例操作都是基于此表:

聚合函数
聚合函数都是行与行之间的运算。
count()
select count(列名) from 表名;
统计该表中该列的行数,但是 null 值不会统计在内,但是如果写为 count(*) 那么 null 也会算进去(就算一整行都是 null 也会算进去)

例如我们暂时使用这个表进行演示:

此表有一行全为空


sum()
select sum(列名) from 表名;
只能针对数字类型使用,也可以对多列进行相加求一个总和;
对该表中的math列的值进行求和。
注:会将 null 值排除在外,不予计算。

avg()
select avg(列名) from 表名;
对该表中的该列进行求平均值。
只能针对数字类型使用
注:会将 null 值排除在外,不予计算。

max()
select max(列名) from 表名;
求出该表中该列的最大值。
只能针对数字类型使用
注:会将 null 值排除在外,不予计算。

min()
select min(列名) from 表名;
求出该表中该列的最小值。
只能针对数字类型使用
注:会将 null 值排除在外,不予计算。

group by
group by 可以实现对数据进行分组。
一般的使用方法都是先用 group by 进行分组,然后再利用聚合函数进行聚合查询。
select * from 表名 group by 列名;
group by 会将该列中值相同的分为一组。因为没有使用order by 进行排序操作所以MySQL并不会对查询结果的顺序做出保证。

此时我们在原有表的基础上再加一行数据。
![]()
加入该条数据后该表变成了:

此时再进行分组查询操作:

此时因为没有使用聚合函数所以 张三这一行 只是在张三这一组中选了一个代表。

如果加入聚合函数就可以很清楚的看到,聚合函数会以每组为单位进行操作。

此时如果我们不想让某行(某几行)参与分组就可以在 group by 之前加入 where 进行条件筛选。
select * from 表名 where 条件 group by 列名;
例:此时我们不想让 null 这个空值和 math=100 的行参与分组

注意:where 条件 必须在 group by 之前
在后面就会报错。

having
having 其实和 where 差不多都是进行条件筛选的语句。
group by 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 where 语句,而需要用 having
having是对分组之后的数据进行筛选的。
例:此时我们不想让 null 这个空值和 成绩=100 的行参与分组

此时的语句执行顺序为:

所以 having 子句中的条件一定要和 select 中的对应

注:having 必须写在 group by 子句之后。

联合查询:
实际开发中往往数据来自不同的表,所以需要多表联合查询。
多表查询的关键是对多张表的数据取笛卡尔积:
下面我先简单介绍一下笛卡尔积,假设我们现在有如下的两张表。而对他们的数据取笛卡尔积就是用第一个表的每行数据分别与第二张表的每行数据进行组合。

这两张表进行笛卡尔积之后就变成了一个 9 行 4 列的新表,如图所示

这就是对两个表进行去取笛卡尔积的结果。
但是,我们很容易就可以发现这里面有非常多的所谓的非法数据,

从图中我们可以看到只有三条数据是合法的,而我们再进行数据库操作的时候肯定不能允许有这么多的非法数据出现在查询结果中,此时我们就可以通过寻找两张表的关联属性来通过 where 条件来进行筛选,比如上面的表就可以通过设置两张表的班级相同来进行筛选。
内连接
内连接其实就是在多张表中求交集(或者说就是最终查询的结果中的每条数据的链接条件都存在于原本的多张表中)。

此处为了更好的演示,我先创建了三张表



内连接的语句就这两条:
select 字段 from 表1 [inner] join 表2 on 连接条件 and 其他条件;
select 字段 from 表1 ,表2 where 连接条件 and 其他条件;
上面这些格式看着很复杂其实完全没有必要记这些。只要按照下面这些步骤一步一步的多练习几次就能掌握。
内连接本质上分为以下几步:
例:查询凌华的各科成绩。
第一步:先求出笛卡尔积
select * from 表一,表二,……
通过上述语句就可以求出多张表的笛卡尔积。

此时一共输出了27条数据。
第二步:加上连接条件,筛选出合法信息
此处推荐再写where中的条件时,使用 表名 点 列名 的写法因为表中可能会有相同的列名。

第三步:结合需求进一步增加条件,对结果进行筛选;
此处需要增加的条件就是名字是凌华。

第四步:对列进行精简,筛选出需要展示的列

此时你再对照开头的表达式就会发现一摸一样,基本上所有的内连接都可以套用这四大步。
select 字段 from 表1 [inner] join 表2 on 连接条件 and 其他条件;
select 字段 from 表1 ,表2 where 连接条件 and 其他条件;
注:第一条语句中的 [inner] join 中的 inner 之所以用 [] 括起来是因为可以省略不写。
外连接
如果多张表中的信息都存在对应关系那么内连接和外连接的结果就都是一样的,如果表中的数据不对应内外连接就会出现差别。
外连接分为左外连接和右外连接。
例:有如下两张数据没有完全对应的表


左外连接

select 字段 from 表1 left join 表2 on 连接条件 and 其他条件;
这个表达式除了 left 之外和内连接都是相同的。

左外连接就是以左表为基础,如果左表有右表没有那么就用 null 代替。
右外连接

select 字段 from 表1 right join 表2 on 连接条件 and 其他条件;
这个表达式除了 right 之外和左外连接都是相同的。

右外连接就是以右表为基础,如果右表有左表没有那么就用 null 代替。
自连接
自连接就是自己和自己取笛卡尔积,和内连接的解题方法相同。
注:在自连接中必须要给表取别名否则会报错。

自连接的优点:可以将行与行之间的关系转换成列与列。


例:在上述表中查询出 C++ 成绩大于单片机成绩的人。

子查询
子查询本质上就是‘套娃’,就是将多个简单的sql语句嵌套成一个复杂的sql语句。


例:查找出名为可莉的学生在几年级。
1.先找出可莉的班级号

2.根据班级号在班级表中找到班级名

而子查询就是将这两句sql语句嵌套起来

合并查询
合并查询是通过 union 来实现的
在MySQl中可以通过 union 来将多个表的查询结果合并成一张表。
注:合并的两个结果的对应列之间列数和数据类型必须相同(列名系统会自动按照第一个表的列名),union 会去掉结果中的重复项。


例如查询这两张表中的 id 和 name 结果返回一张表;

在这张结果中只有一个 id = 1 的学生。
如果你不想对结果进行去重处理,就可以使用 union all

如果对同一张表使用 union 那么它的结果会和使用 or 相同。


相关文章:
MySQL --- 聚合查询 和 联合查询
聚合查询: 下文中的所有聚合查询的示例操作都是基于此表: 聚合函数 聚合函数都是行与行之间的运算。 count() select count(列名) from 表名; 统计该表中该列的行数,但是 null 值不会统计在内,但是如果写为 count(*) 那么 nu…...
Note——torch.size() umr_maximum() array.max() itertools.product()
torch.size Problem TypeError: ‘torch.Size’ object is not callable Reason Analysis torch.Size函数不可调用 因为torch只可以.size() 或 shape Solution 将y.shape()替换为y.size() 或 y.shape ytorch.normal(0,0.01,y.size())2 return umr_maximum(a, axis, None…...
python学习笔记6-DefaultDict
对于一般的字典来说,如果键不存在会导致【KeyError】,因此可以考虑用DefaultDict # Defining the dict d defaultdict(def_value) d["a"] 1 d["b"] 2print(d["a"]) print(d["b"]) print(d["c"…...
Redis 底层对 String 的 3 个优化
Redis对 String 类型实现了很多优化,通过以下三个重要的优化点来解释: 1. 简单动态字符串(SDS) Redis 的 String 类型内部采用简单动态字符串(SDS)来管理字符串。相比于 C 语言的原生字符串,S…...
简约艺术签名小程序源码/流量主小程序源码/字节跳动抖音小程序
源码简介: 本源码为简约艺术签名小程序、流量主小程序以及字节跳动抖音小程序的源代码。该小程序是一款实用的工具,旨在帮助用户创建各种独特的艺术签名,以便在社交媒体平台上更好地展示用户的个性和创意。 源码链接: 网盘源码 …...
Ubuntu(kylin)挂载iso文件和配置apt本地源
版本说明:Ubuntu Server 16.04 LTS解决问题:解决在无任何互联网的环境下,安装软件时缺少依赖包的问题 方法一:通过虚拟机挂载 将镜像挂载到虚拟机以VMware Workstation为例,打开“虚拟机设置”,点击“CD/DVD”选项,将 “设备状态”中的“<...
wps表格求标准差怎么算?
在WPS表格中,要计算标准差,可以使用STDEV函数。标准差是一种衡量数据集合离散程度的统计指标。下面我将详细介绍如何使用STDEV函数来计算标准差。 STDEV函数的语法为:STDEV(range) 其中,range表示要计算标准差的数据范围&#x…...
安达发|制造企业生产排产现状和APS系统的解决方案
随着市场竞争的加剧,制造业企业面临着生产效率、成本控制和客户满意度等方面的巟大压力。在这种背景下,生产排产作为制造业的核心环节,对企业的生产经营具有重要意义。本文将针对制造业的生产排产现状进行分析,并提出相应的APS系统…...
Qt判断一个点在多边形内还是外(支持凸边形和凹变形)
这里实现的方法是转载于https://blog.csdn.net/trj14/article/details/43190653和https://blog.csdn.net/WilliamSun0122/article/details/77994526 来实现的,并且按照Qt的规则进行了调整。 以下实现方法有四种,每种方法的具体讲解在转载的博客中有说明&…...
MySQL导入数据库出现 Got error 168 from storage engine错误
“Got error 168 from storage engine” 是 MySQL 数据库的一个错误,通常是由于存储引擎发生了一些问题导致的。这个错误可能有多种原因引起。以下是一些可能的解决方法: 检查硬盘空间:确保目标数据库的服务器有足够的硬盘空间来执行导入操作…...
使用 VS Code 作为 VC6 的编辑器
使用 VS Code 作为 VC 6.0 的编辑器 由于一些众所周知的原因,我们不得不使用经典(过时)的比我们年龄还大的已有 25 年历史的 VC 6.0 来学习 C 语言。而对于现在来说,这个经典的 IDE 过于简陋,并且早已不兼容新的操作系…...
Peter算法小课堂—蠕动区间
蠕动区间 蠕动区间(尺取法、双游标)是一个经典的优化算法。 我们以毛毛虫🐛举例说明 具体的,我们看题目 例题 最小区间 这一题,我们用暴力法,复杂度O(N^2) 先给出暴力法代码 int ansn1; for(int tail…...
Vant和ElementPlus在vue的hash模式的路由下路由离开拦截使用Dialog和MessageBox失效
问题复现 ElementPlus:当点击返回或者地址栏回退时,MessageBox无效 <template><div>Element Plus Dialog 路由离开拦截测试</div><el-button type"primary" click"$router.back()">返回</el-button>…...
上海市通过区块链技术攻关 构建数字经济可信安全技术底座
日前,上海市印发《上海区块链关键技术攻关专项行动方案(2023—2025年)》(以下简称《行动方案》),提出到2025年,在区块链体系安全、密码算法等基础理论以及区块链专用处理器、智能合约、跨链、新…...
Java 面试题
昨天面试了两个Java开发程序员,问了一些问题,回答的不是很好,看看大家的回答如何,可以在评论区回复,测试下自己的水平。 A程序员: 1. 自我介绍一下; 2. 企业级和互联网行业都有那些项目经验,简…...
layui 表格 展开
一、表格嵌套表格(手风琴打开) <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>设备上下线统计</title><script type"text/javascript" src"../../../l…...
[尚硅谷React笔记]——第4章 React ajax
目录: 脚手架配置代理_方法一 server1.js开启服务器server1:App.js解决跨域问题:脚手架配置代理_方法二 server2.js开启服务器server2第一步:创建代理配置文件编写setupProxy.js配置具体代理规则:App.js运行结果&a…...
Richard Stallman 正在与癌症作战
导读为了纪念 GNU 项目成立 40 周年,自由软件基金会(FSF)已计划在 10 月 1 日(即GNU 40)为家庭、学生以及美国的其他人群组织一场黑客马拉松活动。 活动之前,GNU 项目于 9 月 27 日迎来了 40 岁生日&#…...
MathType7.4最新免费版(公式编辑器)下载安装包附安装教程
MathType是一款专业的数学公式编辑器,理科生专用的必备工具,可应用于教育教学、科研机构、工程学、论文写作、期刊排版、编辑理科试卷等领域。可视化公式编辑器轻松创建数学方程式和化学公式。兼容Office Word、PowerPoint、Pages、Keynote、Numbers 等7…...
如何支持h.265视频
前言 略 h.265视频 h.265是一种视频编码格式。 随着视频编码技术的发展,相比H.264, H.265同等画质体积仅为一半、带宽占用省一半、画质更细腻等诸多优势。 但Web浏览器还不支持H.265的解码播放,因此基于Web Assembly(封装FFmpeg)、JS解封装、Canvas投…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
