【MySQL】进阶查询-聚合查询和联合查询

这篇具有很好参考价值的文章主要介绍了【MySQL】进阶查询-聚合查询和联合查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 前言

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

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

2. 表的设计

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

2.1 一对一

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

2.2 一对多

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

2.3 多对多

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

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

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

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

示例:
下面这个"student1"这个表中,有三条数据.
【MySQL】进阶查询-聚合查询和联合查询
接下来我们把查询结果放到一张新的 "student2"这个表中
【MySQL】进阶查询-聚合查询和联合查询

4. 聚合查询

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

4.1 聚合函数

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

示例:
【MySQL】进阶查询-聚合查询和联合查询
这里有一张学生表,里面有学生的id,姓名,语数英三科的成绩.
【MySQL】进阶查询-聚合查询和联合查询

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

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

4.2 GROUP BY

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

例如:
【MySQL】进阶查询-聚合查询和联合查询
在我的学生表中有这样一些数据.现在我要对语文成绩进行分组
使用group by之后,我们可以看到这已经以语文成绩进行分组了
【MySQL】进阶查询-聚合查询和联合查询
成绩为57的有一个,69的有两个,82的有三个

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

4.3 HAVING

分组查询还可以指定条件,这里的只当条件可以分组之前指定还可以分组之后指定 分组前进行筛选使用的是where 分组后进行筛选使用的则是having SQL 中增加 HAVING 子句原因就是因为WHERE 关键字无法与合计函数一起使用。
去除id=1的语文成绩后进行分组
【MySQL】进阶查询-聚合查询和联合查询
分组之后筛选出语文成绩>60分的学生数量
【MySQL】进阶查询-聚合查询和联合查询
where 关键字虽然无法与合计函数一起使用,但是可以和having一起使用

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

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

5.1 内连接

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

select 字段 from1,2;
select 字段 from1 join2 on 条件;

举个例子:
学生表:
【MySQL】进阶查询-聚合查询和联合查询
班级表:
【MySQL】进阶查询-聚合查询和联合查询
要求查询"王五"的班级的名字.
这就涉及到了两张表,就需要使用联合(多表)查询.

1.首先进行笛卡尔积
【MySQL】进阶查询-聚合查询和联合查询
其实就是学生表和班级表进行排列组合,里面有很多无效的数据.
2. 添加连接条件
【MySQL】进阶查询-聚合查询和联合查询
注意这里的条件写法,应该是表名.字段名,因为涉及到多个表,多个表中的字段名可能相同,因此需要使用 表名.字段 表明是哪个表中的字段.当然如果这个列名是唯一的,也可以不加 表名.

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

使用join on也可以实现相同的效果,同样是刚才的例子
使用join on的方式来完成
1.首先进行笛卡尔积
【MySQL】进阶查询-聚合查询和联合查询
2. 添加条件
【MySQL】进阶查询-聚合查询和联合查询
直接写join或者inner join就是内连接
join on不仅可以实现内连接,还可以实现外连接

5.2 外连接

外连接分为左外连接(left join)和右外连接(right join)
还是刚才的学生表:
【MySQL】进阶查询-聚合查询和联合查询
但班级表中多有两条数据
【MySQL】进阶查询-聚合查询和联合查询
进行笛卡尔积后得到的结果
【MySQL】进阶查询-聚合查询和联合查询
这是内连接得到的结果:
【MySQL】进阶查询-聚合查询和联合查询
这个是进行右连接得到的结果
【MySQL】进阶查询-聚合查询和联合查询
右连接会把右侧表中的数据都获取到,即使左边的值是NULL,也会显示出来
左连接也是类似,会把左侧表中的数据都获取到,即使右边的值是NULL,也会显示出来.

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

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

5.3 自连接

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

例如这里有一张成绩表
【MySQL】进阶查询-聚合查询和联合查询
如果要查询数学成绩比语文成绩高的同学的名字,就需要使用自连接.因为如果进行比较,那么就是"行"和"行"进行的比较
【MySQL】进阶查询-聚合查询和联合查询
可以看到,如果是直接进行连接,那么是会报错的.
Not unique table/alias: 'grades': 这句话告诉我们不是唯一的表,但是可以起别名

【MySQL】进阶查询-聚合查询和联合查询
通过起别名的方式,成功进行自连接
加上连接条件,先筛选出一部分记录,此时我们可以看到语文成绩和数学成绩就在两列了
【MySQL】进阶查询-聚合查询和联合查询
将条件补全,就可以得到我们想要的结果了
【MySQL】进阶查询-聚合查询和联合查询

5.4 子查询

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

例如:在班级表中,找到与"张三"班级相同的同学
【MySQL】进阶查询-聚合查询和联合查询
查到"张三"的班级id这个想必大家都会
【MySQL】进阶查询-聚合查询和联合查询
我们要将得到的这个结果继续参与查询:
【MySQL】进阶查询-聚合查询和联合查询
此时就得到"李四"同学的这条记录了,因为这里的班级id就只有一个,所以后面使用的是 = ,但是如果这个的临时表数据有多条,就可以使用 in 来完成

5.5 合并查询

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

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

还是刚才的分数表
【MySQL】进阶查询-聚合查询和联合查询
如果我们要查询数学成绩>90和英语成绩<60的人的姓名,就可以使用合并查询【MySQL】进阶查询-聚合查询和联合查询

6. 总结

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

感谢你的观看!希望这篇文章能帮到你!
专栏:《速通MySQL》在不断更新中,欢迎订阅!
“愿与君共勉,携手共进!”
【MySQL】进阶查询-聚合查询和联合查询文章来源地址https://www.toymoban.com/news/detail-410267.html

到了这里,关于【MySQL】进阶查询-聚合查询和联合查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL查询之聚合函数查询

    student.sql文件。 MySQL提供一些查询功能,可以对获取的数据进行分析和报告。这些函数的功能有:计算数据表中记录行数的总数、计算某个字段列下的数据的总和,以及计算表中某个字段下的最大值、最小值或者平均值。 或者可以这么理解: 它主要是将一列数据作为一个整体

    2024年02月03日
    浏览(40)
  • 【MySQL】联合查询

    目录 1、前言 2、联合查询 3、内连接和外连接 4、案例演示 4.1 查询篮球哥每科的成绩 4.2 查询所有同学的总成绩及邮箱 5、自连接 5.1 显示所有计算机原理成绩比java成绩高的同学 6、子查询 6.1 查询出篮球哥的同班同学 6.2 多行子查询 7、合并查询 在实际开发中,往往数据是来

    2023年04月15日
    浏览(39)
  • mysql 联合查询

    mysql联合查询 联合查询:union,将多次查询(多条select语句)的结果,在字段数相同的情况下,在记录的层次上进行拼接。 基本语法 联合查询由多条select语句构成,每条select语句获取的字段数相同,但与字段类型无关。 基本语法:select 语句1 + union + [union选项] + select 语句2 + …

    2024年02月08日
    浏览(34)
  • MySQL学习笔记 ------ 联合查询

    #进阶9:联合查询 /* union 联合 合并:将多条查询语句的结果合并成一个结果 语法: 查询语句1 union 查询语句2 union ... 应用场景: 要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时 特点: 1、要求多条查询语句的查询列数是一致的! 2、要求多

    2024年02月15日
    浏览(33)
  • MySQL-多表联合查询

     🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页: 小小恶斯法克的博客 🎈该系列文章专栏: 重拾MySQL 🍹文章作者技术和水平很有限,如果文中出现错误,希望大家能指正🙏 📜 感谢大家的关注! ❤️ 目录 🚀联合查询 🚀子

    2024年01月17日
    浏览(46)
  • MySQL数据库,联合查询

    目录 1. 联合查询 1.1 内查询 1.2 外查询 1.3 自连接 1.4 子查询 1.5 合并查询 联合查询,简单的来讲就是多个表联合起来进行查询。这样的查询在我们实际的开发中会用到很多,因此会用 笛卡尔积 的概念。 啥是笛卡尔积?两张表经过笛卡尔积后得到的新表的列数是两表列数之和

    2023年04月23日
    浏览(72)
  • 【MySQL联合查询】轻松实现数据关联

    联合查询又称为多表查询,它的基本执行过程就是笛卡尔积 那么什么是笛卡尔积呢? 答:笛卡尔积就是将两张表放在一起进行计算,把第一张表的每一行分别取出来和第二张表的每一行进行连接,得到一个新的行。 举例说明笛卡尔积: 假设我们现在有两张表分别为学生信息

    2024年02月06日
    浏览(43)
  • ElasticSearch(7.8版本)聚合查询使用javaHighLevelRestClient实现(从MySQL聚合查询概念->ES聚合概念及实操)

    申明:本文是在实现ES聚合功能中,将过程中查找的多篇博客文献拼接在一起,参考到的博文全部在标题中附上了原文的超链接,分享出来仅是为了提做一个笔记以防忘记,并给大家提供一个参考。 聚合操作指的是在数据查找基础上对于数据进一步整理筛选行为,聚合操作也

    2023年04月24日
    浏览(57)
  • 【MySQL】聚合函数与分组查询

    MySQL中的聚合函数用于对数据进行计算和统计,常见的聚合函数包括下面列举出来的聚合函数: 查看班级有多少同学 统计数学成绩有多少个 统计英语不及格的人数 查看数学成绩的总和 统计英语不及格的分数总和 统计不及格的英语的平均分不需要上面那么麻烦自己手动除:

    2024年02月14日
    浏览(41)
  • MySQL数据库,聚合查询

    目录 1、聚合查询 1.1聚合函数 1.1.1count函数 1.1.2sum函数 1.1.3avg函数 1.1.4max函数 1.1.5min函数 1.2group by子句 1.3having 聚合函数查询又叫函数查询,它是通过一些特定的函数根据需求来查询相关的信息,常见的聚合函数为: COUNT - 求总数,不包含某字段为null值 SUM - 求和,不包含某字

    2023年04月21日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包