广告
返回顶部
首页 > 资讯 > 数据库 >MySQL聚合查询与联合查询操作实例
  • 132
分享到

MySQL聚合查询与联合查询操作实例

2024-04-02 19:04:59 132人浏览 独家记忆
摘要

目录一. 聚合查询1.聚合函数(count,sum,avg...)2.GROUP BY子句3.HAVING二. 联合查询((重点)多表)1.内连接2.外连接3.自连接4.子查

一. 聚合查询

1.聚合函数(count,sum,avg...)

常见的统计总数、计算平局值等操作,可以使用聚合函数来实现,常见的聚合函数有:

  • 注意最后面都是可以加上where,order by这些语句的,这些聚合函数会根据这些语句的结果集来进行查询
  • 后面最好不要加上limit,因为Mysql的limit和别的数据库的limit不一样
  • 有使用统计列的聚合函数的时候,避免再写上其他列,不然会出现这种无意义显示第一列的情况

注意点:

1.count:可以使用count(*),count(0),count(1)这样,说白了实际上和select 1 from整个表是一样的道理,这个count里面的0,1只是作为参数传入而已,先select 1,然后再统计count的值

2.sum,max,min,avg都不可以传入*,必须传入字段或者表达式使用

3.avg可以和sum结合起来用,聚合函数都可以多个一起用

2.GROUP BY子句

SELECT 中使用 GROUP BY 子句可以对指定列进行分组查询。需要满足:使用 GROUP BY 进行分组查询时,SELECT 指定的字段必须是“分组依据字段”,其他字段若想出现在SELECT 中则必须包含在聚合函数中。

  • Select后面的聚合函数是等Group by执行完分组以后才进行的
  • Group by语句的实质就是分组,常配合聚合查询使用

语法:

Select指定的字段必须是group by后面有的,没有的只能出现在聚合函数中,不然会出问题

GROUP BY注意事项

1.Group by语句的实质就是分组,常配合聚合查询使用

2.只要有聚合函数出现,就可能要分组

3.分组操作中,查询允许的是分组字段,聚合函数,其他非分组字段需要保证分组后没有多行(如学生id分组,查询字段可以有学生姓名,因为学生id分组以后,只有一行)

4.分组前过滤条件用where,分组后用having(代码是顺序执行的)

执行顺序:from > on> join > where > group by > with > having >select > distinct > order by > limit

  • 最先从from开始执行,所以别名一般都在from这里命名,你在select命名也可以,不过select较后面执行,命名了前面执行那些地方都用不了。
  • Limit永远在最后执行

5.---select classid,average(score) from student where score>60 group by classid havinng classid<=3

先找出score > 60的行,然后按照classid分组,得到的结果里面,再选出class <=3的行,显示出分数总和(显示出1,2,3各班的分数大于60分的学生的平均分)

6.group by 就是将重复的行合并成一行

7.group by 很多个字段的时候,可能没有合并,但是达到了分组的效果,可以使用聚合函数了。

3.HAVING

GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用HAVING。HAVING是在GROUP BY 后面执行的

二. 联合查询((重点)多表)

1.内连接

语法:

这里第二个方法的话,你可能不知道哪个是连接条件,哪个是筛选结果集的条件。用哪种都行,还是优先用第一种吧,为了和后面的外连接对应。内连接就相当于是在得到的笛卡尔积上给了连接条件

这里要是不group by进行分组的话,就会像下面这样只有一行,相当于是把所有学生的所有成绩全部加起来了。但是我们这里需要的是单个学生的总成绩,所以我们要先按学生id进行分组。

2.外连接

外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完全显示我们就说是右外连接。

注意点:

  • 左连接:左表的数据不会依据连接条件(on后面的部分,包括and上去的)过滤而全部显示,其他条件还是可以过滤,比如后面再加上where等条件。
  • 如果右表有数据有不满足连接条件的值,右表数据会显示null,左表全显示

语法:(注意:On后面还能跟上where)

同样的查询方法,这次能显示出第8名成绩为空的学生的信息,左表也就是student表中的数据会全部显示出来,不会受到连接条件stu.id = sco.student_id这一连接条件的影响,如果是之前的内连接,就显示不出老外学中文这一学生的信息,因为在sco表中根本就没有老外学中文这一学生的id。

3.自连接

自连接是指在同一张表连接自身进行查询。

使用场景:同一张表,多行进行比较。

注:自连接查询也可以使用join on语句来进行查询。

4.子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询

查询与“不想毕业” 同学的同班同学:(自连接)

多行子查询:返回多行记录的子查询(用的多)

案例:查询“语文”或“英文”课程的成绩信息:(内连接)

这里的group by没有起到合并的作用,但是起到了分组的作用

5.合并查询

在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 uNIOn,union all。使用UNION和UNION ALL时,前后查询的结果集中,字段需要一致

**有些情况下,多张表之间没法关联,但是要查询一样字段的数据

**union的效率比or高

  • union

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行(取到的数据内容完全一样的时候,会自动去重)。

案例:查询id小于3,或者名字为“英文”的课程:

  • union all

该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。(取到的数据完全一样的时候,都会显示出来,不会进行去重)

案例:查询id小于3,或者名字为“Java”的课程

总结

到此这篇关于mysql聚合查询与联合查询的文章就介绍到这了,更多相关MySQL聚合查询与联合查询内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL聚合查询与联合查询操作实例

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

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

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

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

下载Word文档
猜你喜欢
  • oracle中explain的用法
    oracle中的explain命令用于分析sql语句的执行计划,使用方法为在sql语句前添加explain关键字。explain结果包含id、操作符类型、行数估计、成本估计、输出行数估计...
    99+
    2024-05-04
    oracle access sql语句
  • oracle中tochar的用法
    oracle to_char 函数将数字、日期或时间值转换为字符串。格式化字符串指定输出格式,包括日期、时间和数字格式元素。常见日期格式元素包括“%y”(年)和“%m”(月),数字格式元...
    99+
    2024-05-04
    oracle 格式化输出
  • oracle中从右往左截取的函数是什么
    oracle 的 ltrim 函数用于从字符串右侧截取所有空白字符,包括空格、制表符、换行符和回车符。它返回修剪后的字符串,如果字符串不包含空白,则返回原始字符串。 LTRIM 函数 ...
    99+
    2024-05-04
    oracle
  • oracle中regexp_like的用法
    oracle 中的 regexp_like 函数用于比较字符串是否与正则表达式相匹配,返回布尔值:语法: regexp_like(string, regexp, [condition])...
    99+
    2024-05-04
    oracle
  • oracle中regexplike用法
    oracle regexp_like 运算符用于执行正则表达式匹配,检查字符串是否符合指定模式,返回布尔值。它支持各种元字符,如 .、*、+、、^、$、[]、{},允许复杂的匹配模式。此...
    99+
    2024-05-04
    oracle
  • oracle中null和空字符串是等价的嘛
    oracle 中,null 和空字符串不相等。null 代表未知值,与任何值都不相等;空字符串是一个长度为 0 的字符串,可以与其他空字符串相等。null 与空字符串的差异在于:null...
    99+
    2024-05-04
    oracle
  • oracle中listagg函数的用法
    listagg 函数将一组行的数据连接成一个字符串,使用指定的连接符分隔元素。用法包括:1. 连接一个列中的所有值;2. 使用连接符分隔值;3. 忽略 null 值;4. 按组分区;5....
    99+
    2024-05-04
    oracle
  • oracle中count函数与什么函数一样
    oracle 中 count 函数相当于 sql 中的 count() 函数。它用于计算指定列或表达式的非空值的个数,包括:count(*):计算表中所有非空值的个数。count(col...
    99+
    2024-05-04
    oracle
  • oracle中的rownum如何替代
    除 oracle 的 rownum 伪列外,您可以使用以下替代方案获取行的顺序号:1. 子查询(使用嵌套子查询);2. 分析函数(例如 row_number());3. 序列(对于新插入...
    99+
    2024-05-04
    oracle
  • oracle中declare用法
    oracle 中的 declare 语句声明变量、常量和游标等对象。其语法为:declare [修饰符] 标识符 数据类型 [default 默认值] [, ...], 用于存储临时数据...
    99+
    2024-05-04
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作