MySQL --- 聚合查询 和 联合查询

news2024/11/21 0:13:02

聚合查询:

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

聚合函数

聚合函数都是行与行之间的运算。

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 相同

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1105154.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统:线程同步和调度

文章目录 线程同步和调度一、实验目的二、实验要求与内容、过程与结果 总结 线程同步和调度 一、实验目的 通过创建线程、分配线程优先级和终止线程的程序设计和调试操作,进一步熟悉操作系统的线程概念,理解Windows 2000线程的生命周期。 通过对事件、…

7z压缩包如何设置加密?如果忘记密码该怎么办?

7z压缩包是压缩率最大的压缩包格式,当我们给文件进行压缩时,可能会想给压缩包进行加密,那么7z压缩包如何设置加密?加密的7z压缩包又如何解密呢?分享7-zip加密、解密教程。包括忘记了压缩包密码该如何解决? …

地理知识笔记:Haversine距离

1 介绍 Haversine距离用于计算地球上两点之间的大圆距离当考虑地球的真实曲率时,它特别适用于计算两个经纬度坐标之间的距离 其中: 2 python 实现 def haversine_distance(lat1, lon1, lat2, lon2):R 6371 # Earth radius in kilometersdlat np.r…

让千年诗酒文化生生不息,多国文艺界名家齐聚2023年国际诗酒文化艺术周盛宴

执笔 | 萧 萧 编辑 | 古利特 10月15日,国际诗酒文化大会第七届中国酒城泸州老窖文化艺术周在酒城泸州盛大开幕,文学家、艺术家、翻译家、文化学者、媒体记者等各界嘉宾与来自阿根廷、智利、哥伦比亚等十余国的诗人朋友齐聚,共襄年度诗酒文…

关闭mysql,关闭redis服务

1. 关闭redis服务: 查询redis安装目录: whereis redis which redis find / -name redis 关闭redis服务: redis-cli -h 127.0.0.1 -p 6379 auth 输入密码 shutdown 关闭redis服务 2. 关闭mysql服务: 查询mysql安装目录&…

基于Java的留学生交流互动论坛系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

【LeetCode】38. 外观数列

1 问题 给定一个正整数 n ,输出外观数列的第 n 项。 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列: countAndSay(1) “1” countAndSay(n…

【linux 0.11 学习记录】一、环境配置,用Bochs输出hello world

想学习linux,又不知道从哪里下手,体系太大,哪块内容都很多,无奈下选择了linux0.11作为入口,本系列将是学习笔记,希望能坚持下去吧 环境配置 这里使用win10bochs2.7 安装bochs 官网:https://b…

【学习笔记】RabbitMQ-6 消息的可靠性投递2

参考资料 RabbitMQ官方网站RabbitMQ官方文档噼咔噼咔-动力节点教程 文章目录 十一、队列Queue的消息属性11.1 具体属性11.2 自动删除11.2 自定义参数11.2.1 **Message TTL** 消息存活时间11.2.2 **Auto expire** 队列自动到期时间11.2.3 **Overflow behaviour** 溢出行为11.2.4…

编程基础-C++入门到入土知识手册

C基础知识 C 语言教程一 、简介 环境设置C11 新特性文本编辑器C 编译器 二、程序结构编译 & 执行 C 程序三、 基本语法C 的令牌(Token)1分号 ;2注释3标识符4关键字5 C 中的空格 四、数据类型整数类型浮点类型void 类型 C primer Plus黑马C语言简介C语…

创建node、vue、以及@vuecli 和 vue-cli 的区别

创建node、vue、以及vue/cli 和 vue-cli 的区别 创建vue的五种方法 参考 如何创建一个vue项目(详细步骤) 方法一:vue init webpack 项目名(vue-cli2.x的初始化方式) vue init webpack blog 创建项目(blog 是项目名…

Vuex:一个强大的状态管理模式

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开心好久好久😎 📚系列专栏:Java全栈,…

故障诊断实验台 | PT300mini微型振动故障实验台

很多同学因为实验数据而被困扰,目前数据来源有3方面,公开实验数据集、校企合作项目实际数据、自制实验台数据。 公开实验数据集被用烂了,容易被审稿人质疑; 校企合作项目实际数据缺少故障数据,数据需保密,…

抖音同城榜上榜策略

随着抖音的普及,越来越多的人开始使用抖音来展示自己的才华、记录生活或者做推广。但是,如何让自己的短视频在抖音同城榜上榜,成为本地热门话题呢?下面,我将分享一些实用的策略,帮助您实现这一目标。 抖音同…

.NET验收

验收通用模板: 1.该资料计划看几天? 实际看了几天? 计划7天,实际看了9天 2.多少天一篇总结?将总结列出来。 一周总结一篇。 博客地址:3.这个资料相较于之前资料共同的内容是什么? 不同的(需要强化学习)…

“数聚瑞安 · 创新未来”中国·瑞安第四届创新创业大赛角逐火热,初赛结果已公布!

“数聚瑞安 创新未来”中国瑞安第四届创新创业大赛得分排行榜上,各参赛队伍的分数不断被刷新。由中共瑞安市委、瑞安市人民政府主办,瑞安市科学技术局承办,华为(浙南)工业互联网创新中心、瑞安华数广电网络有限公司、…

分布式服务的链路跟踪 Sleuth Micrometer zipkin OpenTelemetry

由来 在分布式应用开发过程中,一个请求会调用多个应用,会有那种需要知道各个应用之间耗时的想法,这样可以知道一个调用的总时长以及各个组件之间的处理耗时,后面方便定位问题。 理论依据 起源于 google dapper 论文 https://re…

记录:移动设备软件开发(layout六大布局)

目录 前言layoutLinearLayout线性布局LinearLayout的常用属性Android:orientation属性Android:gravity属性 TableLayout表格布局TableLayout的常用属性collapsecolumns属性shrinkcolums属性stretchcoumns属性 RelativeLayout相对布局Absolute Layout绝对…

Python学习笔记——基本类型、函数、输入和输出

食用说明:本笔记适用于有一定编程基础的伙伴们。希望有助于各位! 基础类型 常用的简单类型有str,float,int,bool等,常见的复杂数据类型有function,type,list,tuple&…

SAP_MMPV创建自动任务每月底自动开下月物料账

SAP_MMPV创建自动任务每月底自动开下月物料账 1、MMPV设置变式 输入事务代码MMPV进入物料开账界面,输入公司代码,注意开账月份与时间等都不输入,点击保存按钮,如下图。 输入变式名称、描述,将变式设置为“仅用于后台…