广告
返回顶部
首页 > 资讯 > 数据库 >MySQL进阶查询、聚合查询和联合查询
  • 387
分享到

MySQL进阶查询、聚合查询和联合查询

MySQL进阶查询MySQL聚合查询MySQL联合查询 2023-04-12 09:04:40 387人浏览 八月长安
摘要

目录1. 前言2. 表的设计2.1 一对一2.2 一对多2.3 多对多3.将查询结果放到另一个表中4. 聚合查询4.2 GROUP BY4.3 HAVING5. 联合查询(多表查询)5.1 内连接5.2 外连接5

1. 前言

文章主要围绕着以下三个问题:

  1. group by的作用
  2. where与having的区别
  3. 表的连接分为哪些,分别是什么作用

2. 表的设计

在创建数据表时,我们通常时根据需求找到"实体", 梳理"实体"之间的关系,从而进行创建.
"实体"之间可能会有以下几种关系:1.没关系 2.一对一 3.一对多 4.多对多.
没关系应该是最好理解的,就是单独的一张表,并不涉及到其它的表.

2.1 一对一

一对一的关系在生活中是很常见的,例如每个学生都有属于自己的学号,每个学号就只对应一个学生. 类似于这样的情况,就是一对一的关系.
此时就可以创建两张表,一个是学生表,另一个是学号表. 学生表里的学号就可以和学号表中的学号关联起来.

2.2 一对多

学生在学校上课时,会有一个班级. 但是一个班级可以有多个学生. 这就是一对多的关系.

2.3 多对多

举个例子,我们在学习课程时,可以选择多门课程进行学习,而课程也可以被多个学生进行选择. 这就是多对多的关系.
多对多的关系,在创建表时,可以使用"关联表" 将两个实体联系起来.

如果在设计数据库表时,场景很复杂,可以使用ER图帮助我们更好的创建数据库表.

3.将查询结果放到另一个表中

insert into 表2 select 字段 from 表1;
# 表2 是要存放查询结果的表
# 表1 是要查询的表
# 查询结果的列要和表2的列相匹配!
# 也可以将查询结果存放在表2的指定列中

示例:

下面这个"student1"这个表中,有三条数据.

在这里插入图片描述

接下来我们把查询结果放到一张新的 "student2"这个表中

在这里插入图片描述

4. 聚合查询

聚合查询可以进行"行"与"行"之间的运算

4.1 聚合函数

函数说明
COUNT([DISTINCT] expr)返回查询到的数据的 数量
SUM([DISTINCT] expr)返回查询到的数据的 总数
AVG([DISTINCT] expr)返回查询到的数据的 平均值
MAX([DISTINCT] expr)返回查询到的数据的 最大值
MIN([DISTINCT] expr)返回查询到的数据的 最小值
  • count函数 可以对行进行计算,也可以对列进行计算.

示例:

在这里插入图片描述

这里有一张学生表,里面有学生的id,姓名,语数英三科的成绩.

在这里插入图片描述

  • sum,avg,max和min 都是只对数字生效,如果不是数字则没有意义

sum函数的用法和count函数类似. 不过只能计算"列",如果这一列存在"null",则不会参与运算
avg,max,min的用法 和 sum 类似,就不一一介绍了

4.2 GROUP BY

GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。

例如:

在这里插入图片描述

在我的学生表中有这样一些数据.现在我要对语文成绩进行分组
使用group by之后,我们可以看到这已经以语文成绩进行分组了

在这里插入图片描述

成绩为57的有一个,69的有两个,82的有三个

需要注意的是:在进行查询分组的时候,只有分组的这一列,可以查询,其它列必须搭配聚合函数来进行查询

4.3 HAVING

分组查询还可以指定条件,这里的只当条件可以分组之前指定还可以分组之后指定 分组前进行筛选使用的是where 分组后进行筛选使用的则是having sql 中增加 HAVING 子句原因就是因为WHERE 关键字无法与合计函数一起使用。

去除id=1的语文成绩后进行分组

在这里插入图片描述

分组之后筛选出语文成绩>60分的学生数量

在这里插入图片描述

where 关键字虽然无法与合计函数一起使用,但是可以和having一起使用

5. 联合查询(多表查询)

联合查询一般是在多表之间建立连接后查询的过程.其实就是计算"笛卡尔积"的过程
但是当表很大的时候,如果进行联合查询,效率就会特别低.因为"笛卡尔积"就是简单的排列组合,有些数据是"合理"的,有些数据是"不合理"的.所以我们就要把"有效"的数据筛选出来.因此联合查询通常需要加连接条件和其它筛选条件

5.1 内连接

内连接得到的是两张表中都存在的数据
两种写法:

select 字段 from 表1,表2;
select 字段 from 表1 join 表2 on 条件;

举个例子:

学生表:

在这里插入图片描述

班级表:

在这里插入图片描述

要求查询"王五"的班级的名字.
这就涉及到了两张表,就需要使用联合(多表)查询.

1.首先进行笛卡尔积

在这里插入图片描述

其实就是学生表和班级表进行排列组合,里面有很多无效的数据.

2. 添加连接条件

在这里插入图片描述

注意这里的条件写法,应该是表名.字段名,因为涉及到多个表,多个表中的字段名可能相同,因此需要使用 表名.字段 表明是哪个表中的字段.当然如果这个列名是唯一的,也可以不加 表名.

在这里插入图片描述

刚才的结果还是太多了,我们也可以加上指定列进行查询,同样需要使用表名.字段的形式进行查询

使用join on也可以实现相同的效果,同样是刚才的例子
使用join on的方式来完成

1.首先进行笛卡尔积

在这里插入图片描述

2. 添加条件

在这里插入图片描述

直接写join或者inner join就是内连接
join on不仅可以实现内连接,还可以实现外连接

5.2 外连接

外连接分为左外连接(left join)和右外连接(right join)

还是刚才的学生表:

在这里插入图片描述

但班级表中多有两条数据

在这里插入图片描述

进行笛卡尔积后得到的结果

在这里插入图片描述

这是内连接得到的结果:

在这里插入图片描述

这个是进行右连接得到的结果

在这里插入图片描述

右连接会把右侧表中的数据都获取到,即使左边的值是NULL,也会显示出来
左连接也是类似,会把左侧表中的数据都获取到,即使右边的值是NULL,也会显示出来.

如果两张表中的数据,在对方表中都有,那么此时内外连接是没有区别的,如果两张表中的数据只有一部分在对方的表中,内连接就是获取两张表的"交集",如果是外连接,那么获取到的值就是一侧表的全部记录.

还有一种连接是"全外连接",但是在Mysql中并不支持

5.3 自连接

自连接就是和自己进行笛卡尔积
在条件查询中,只是"列"和"列"之间的比较,但是有的地方需要用的 "行"和"行"之间的比较,就需要使用自连接,将"行"转为"列"再进行比较

例如这里有一张成绩表

在这里插入图片描述

如果要查询数学成绩比语文成绩高的同学的名字,就需要使用自连接.因为如果进行比较,那么就是"行"和"行"进行的比较

在这里插入图片描述

可以看到,如果是直接进行连接,那么是会报错的.
Not unique table/alias: 'grades': 这句话告诉我们不是唯一的表,但是可以起别名

在这里插入图片描述

通过起别名的方式,成功进行自连接
加上连接条件,先筛选出一部分记录,此时我们可以看到语文成绩和数学成绩就在两列了

在这里插入图片描述

将条件补全,就可以得到我们想要的结果了

在这里插入图片描述

5.4 子查询

子查询本质就是将多个查询语组合成一个SQL语句,例如在查询得到的临时表上再次进行查询

例如:在班级表中,找到与"张三"班级相同的同学

在这里插入图片描述

查到"张三"的班级id这个想必大家都会

在这里插入图片描述

我们要将得到的这个结果继续参与查询:

在这里插入图片描述

此时就得到"李四"同学的这条记录了,因为这里的班级id就只有一个,所以后面使用的是 = ,但是如果这个的临时表数据有多条,就可以使用 in 来完成

5.5 合并查询

合并查询是把两个查询的结果集合合并到一起,使用的是uNIOn 和union all 这两个关键字

union: 如果有重复的数据,就会去重union all: 如果有重复的数据,则不会去重

还是刚才的分数表

在这里插入图片描述

如果我们要查询数学成绩>90和英语成绩<60的人的姓名,就可以使用合并查询

在这里插入图片描述

6. 总结

在SQL语句中,查询数据的操作与其它操作语句相比还是有一些难度的,主要涉及到一些多表查询等操作.对于里面涉及到的一些关键字,连接类型要熟练掌握

以上就是mysql进阶查询、聚合查询和联合查询的详细内容,更多关于MySQL进阶、聚合、联合查询的资料请关注我们其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL进阶查询、聚合查询和联合查询

本文链接: https://www.lsjlt.com/news/201428.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL进阶查询、聚合查询和联合查询
    目录1. 前言2. 表的设计2.1 一对一2.2 一对多2.3 多对多3.将查询结果放到另一个表中4. 聚合查询4.2 GROUP BY4.3 HAVING5. 联合查询(多表查询)5.1 内连接5.2 外连接5...
    99+
    2023-04-12
    MySQL进阶查询 MySQL聚合查询 MySQL联合查询
  • 【MySQL】进阶查询-聚合查询和联合查询
    文章目录 1. 前言2. 表的设计2.1 一对一2.2 一对多2.3 多对多 3.将查询结果放到另一个表中4. 聚合查询4.1 聚合函数4.2 GROUP BY4.3 HAVING 5. 联合查询(多表查询)5.1 ...
    99+
    2023-08-17
    mysql 数据库 sql
  • MySQL --- 聚合查询 和 联合查询
    聚合查询: 下文中的所有聚合查询的示例操作都是基于此表: 聚合函数 聚合函数都是行与行之间的运算。 count() select count(列名) from 表名; 统计该表中该列的行数,但是 null 值不会统计在内,但是...
    99+
    2023-10-21
    mysql 数据库 sql
  • 【MySQL】聚合查询 + 多表联合查询(重点)
    文章目录 前言一、聚合查询1, 聚合函数2, 聚合函数使用示例3, GROUP BY 子句4, HAVING 子句 二、联合查询(重点)1, 笛卡尔积2, 内连接2.1, 示例12...
    99+
    2023-09-29
    mysql 数据库 聚合查询 联合查询 内连接
  • MySQL 数据库聚合查询和联合查询操作
    目录1. 插入被查询的结果2. 聚合查询2.1 介绍2.2 聚合函数2.3 group by 子句2.4 having3. 联合查询3.1 介绍3.2 内连接3.3 外连接...
    99+
    2022-11-12
  • MySQL聚合查询与联合查询操作实例
    目录一. 聚合查询1.聚合函数(count,sum,avg...)2.GROUP BY子句3.HAVING二. 联合查询((重点)多表)1.内连接2.外连接3.自连接4.子查...
    99+
    2022-11-13
  • MySQL中的聚合查询和联合查询操作代码
    目录一、聚合查询(行与行之间的计算)1.常见的聚合函数有:2.group by3.having二、联合查询(多表查询)1.进行联合查询的步骤:2.内连接(from,join on)3.外连接(left/righ...
    99+
    2023-03-20
    mysql聚合查询和联合查询 mysql聚合查询 mysql联合查询
  • MySQL中的聚合查询和联合查询怎么实现
    这篇文章主要介绍“MySQL中的聚合查询和联合查询怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL中的聚合查询和联合查询怎么实现”文章能帮助大家解决问题。一、聚合查询(行与行之间的计...
    99+
    2023-07-05
  • MySQL数据库聚合查询和联合查询怎么实现
    这篇文章主要介绍“MySQL数据库聚合查询和联合查询怎么实现”,在日常操作中,相信很多人在MySQL数据库聚合查询和联合查询怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL数据库聚合查询和联合...
    99+
    2023-06-21
  • MySQL联合查询(多表查询)
    一、内连接 select *from 表1 [ inner | cross ] join 表2 [ on过滤条件 ] [ where查询条件 ] ; [ inner | cross ]: join 内连接关键字(必须要有...
    99+
    2023-09-14
    mysql 数据库 database
  • MySQL聚合查询与联合查询操作的示例分析
    这篇文章主要为大家展示了“MySQL聚合查询与联合查询操作的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL聚合查询与联合查询操作的示例分析”这篇文章吧。一. 聚合查询1.聚合函...
    99+
    2023-06-29
  • 【MySQL】详解聚合查询、多表查询
    MySQL 增删查改(进阶) 文章目录 MySQL 增删查改(进阶)01 表的设计表的三大范式 02 查询操作进阶新增聚合查询countsumavgmaxmin 分组查询 GR...
    99+
    2023-10-07
    mysql adb 数据库
  • mysql 联合查询
    mysql联合查询 联合查询:union,将多次查询(多条select语句)的结果,在字段数相同的情况下,在记录的层次上进行拼接。 基本语法 联合查询由多条select语句构成,每条select语句获取的字段数相同,但与...
    99+
    2023-08-31
    数据库 sql mysql
  • mongo 聚合查询
    *****************未加索引******************************************> var startTime = new Date();> db....
    99+
    2022-10-18
  • 【MySQL】MySQL表之联合查询(多表查询)
    📌前言:本篇博客介绍MySQL数据库的MySQL表之联合查询(多表查询),学习MySQL之前要先安装好MySQL,如果还没有安装的小伙伴可以看看博主前面的博客,里面有详细的安装教程。 那我们废话不多说,直接进入主体!...
    99+
    2023-08-16
    mysql 数据库 java
  • MYSQL查询--子查询,合并查询
    子查询 带IN关键字的子查询 只有子查询返回的结果列包含一个值时,比较运算符才适用。假如一个子查询返回的结果集是值的列表,这时比较运算符就必须用IN运算符代替。IN运算符可以检测结果集中是否存在某个特定的...
    99+
    2022-10-18
  • 如何使用mysql连接查询、联合查询、子查询
    这篇文章主要讲解了如何使用mysql连接查询、联合查询、子查询,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。连接查询:连接查询就是将多个表联合起来查询,连接查询方式有内连接、外...
    99+
    2022-10-18
  • Mysql中怎么实现子查询和联合查询
    Mysql中怎么实现子查询和联合查询,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。查询: 在select查...
    99+
    2022-10-18
  • 详解MySQL子查询(嵌套查询)、联结表、组合查询
    一、子查询 MySQL 4.1版本及以上支持子查询 子查询:嵌套在其他查询中的查询。 子查询的作用: 1、进行过滤: 实例1:检索订购物品TNT2的所有客户的ID = + 一般,在WHERE...
    99+
    2022-10-18
  • 【MySQL】基本查询(插入查询结果、聚合函数、分组查询)
    目录 一、插入查询结果二、聚合函数三、分组查询(group by & having)四、SQL查询的执行顺序五、OJ练习 一、插入查询结果 语法: INSERT INTO tab...
    99+
    2023-09-25
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作