MYSQL聚合查询、分组查询、联合查询举例详解

 更新时间:2024年09月23日 08:31:01   作者:鸽鸽程序猿  
我们做的很多查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个单一的值,这篇文章主要介绍了MYSQL聚合查询、分组查询、联合查询的相关资料,需要的朋友可以参考下

聚合查询

聚合查询就是针对表中行与行之间的查询。

聚合函数

count()

count(列名):查询当前列下面有多少条数据。

select count(*) from 表名;#查询当前表有多少行
select count(列名) from 表名;#查询该列有多少行
  • count(1),里面加个数字常量也可以达到count(*)的效果,推荐写count(*)。
  • 使用count(列名)查询到null时不算入行数。

sum()

把查询到的结果相加。

select sum(列名) from 表名;#将该列所有值相加
  • 必须是数字,不是数字会报警告没结果。
  • 使用该函数会将null不计算,不会出现加上null和为null的结果。

avg()

求查询到结果的平均值。

select avg(列名/表达式) from 表名;#将该列所有值的平均数
  • 必须是数字,不是数字会报警告没结果。
  • 使用该函数会将null那行不计算,比如1,2,null平均值为(1 + 2)/ 2 = 1.5000。

max()和min()

分别返回查到的最大值和最小值。

select max(列名) from 表名;#返回该列最大值
select min(列名) from 表名;#返回该列最小值
  • 必须是数字,不是数字会报警告没结果。
  • null不参与。

总结

函数说明
count (列名)返回查询到的数据的 数量
sum(列名)返回查询到的数据的 总和,不是数字没有意义
avg(列名)返回查询到的数据的 平均值,不是数字没有意义
max(列名)返回查询到的数据的 最大值,不是数字没有意义
min(列名)返回查询到的数据的 最小值,不是数字没有意义

分组查询

group by 子句

查询(select) 中使用 group by子句可以对指定列进行分组查询。
功能就是将查询到的结果中 group by 子句后的列完全相同的合并在一起。

select 列名.... from 表名 group by 列名1, 列名2;

group by 子句后也可以跟 order by子句排序。

having 子句

group by 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 where语句,而需要用having。
因为分组结果在结果集中是临时表,不是真是的数据,where处理的事是真实数据。

select 列名.... from 表名 group by 列名1, 列名2 having 条件;

联合查询

联合查询就是将多张表联合起来查询,将需要的信息一起取出来。

笛卡尔积

笛卡尔积就是将表中每行与其他表的行进行全排列。

select .... from 表1,表2;

例如:

  • 当使用笛卡尔积的表含有主外键查询时,因为是全排列,必然会产生无效数据,我们就可以使用条件查询,但是必须要使用 表名.列名。

  • 通过指定列查询精简结果集时也需要使用 表名.列名。

  • 可以通过给表名起别名来精简SQL语句。

内连接

两种写法:

select 列名 from 表1 as 别名1,表2 as 别名2 where 条件 and 其他条件;

select 列名 from 表1 as 别名1 join 表2 as 别名 on 条件 and 其他条件; 

外连接

外连接分为左外连接和右外连接。

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

join右侧的表完全显示我们就说是右外连接。

select 列名 from 表1 as 别名1 right join 表2 as 别名2 on 条件;#右外连接,表2全显示

select 列名 from 表1 as 别名1 left join 表2 as 别名2 on 条件;#左外连接,表1全显示

自连接

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

但是必须要对表进行起不同的别名。

select 列名 from 表名 as 别名1,表名 as 别名2 where 条件 and 其它条件;

select 列名 from 表名 as 别名1 join 表名 as 别名2 on 条件 and 其它条件;

子查询

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

select 列名 from 表名 where 列 = (select语句 );#例子

单行子查询

作为条件的子查询语句返回值只有一行数据。

多行子查询

作为条件的子查询语句返回值有多行行数据。

  • 可以使用in来处理:

  • 可以使用多列包含:
    将where条件括号中与返回值一一进行比较

  • 使用[not] exists关键字
select 列名 from 表名 where exists (select语句);

后面查询语句返回结果集为空就不执行前面的查询语句,反之不为空执行。

from子句使用子查询

在from子句中使用子查询:子查询语句出现在from子句中。
把一个子查询当做一个临时表使用。

合并查询

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

  • union操作符用于取得两个结果集的并集。当使用该操作符时,
    会自动去掉结果集中的重复行。
  • union all 操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。

总结 

到此这篇关于MYSQL聚合查询、分组查询、联合查询的文章就介绍到这了,更多相关MYSQL聚合查询、分组查询、联合查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySql连接查询方式详解

    MySql连接查询方式详解

    这篇文章主要介绍了mysql连接查询,当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回,本文给大家介绍的非常详细,需要的朋友参考下吧
    2022-09-09
  • MySql实现翻页查询功能

    MySql实现翻页查询功能

    分页查询在网页中随处可见,那原理是什么呢?下面简单介绍一下基于MySql数据库的limit实现方法,感兴趣的朋友一起看看吧
    2019-11-11
  • Mysql查询语句执行过程及运行原理分析

    Mysql查询语句执行过程及运行原理分析

    这篇文章主要介绍了Mysql查询语句执行过程及运行原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • MySql中特殊运算符的使用方法总结

    MySql中特殊运算符的使用方法总结

    这篇文章主要给大家介绍了关于MySql中特殊运算符的使用方法,分别介绍的是<=> 安全比较运算符、:= 赋值的作用、@ 用户变量以及@@ 系统变量,文中介绍的非常详细,需要的朋友可以参考下
    2018-09-09
  • mysql8.0 lower_case_table_names 大小写敏感设置问题解决

    mysql8.0 lower_case_table_names 大小写敏感设置问题解决

    在默认情况下,这个变量是设置为0的,以保持向前兼容性,如果将该变量设置为1,则表名和数据库名将被区分大小写,本文主要介绍了mysql8.0 lower_case_table_names 大小写敏感设置问题解决,感兴趣的可以了解一下
    2023-09-09
  • SQLyog错误号码MySQL plugin caching_sha2_password could not be loaded的解决方法

    SQLyog错误号码MySQL plugin caching_sha2_password could not 

    这篇文章主要介绍了SQLyog错误号码 plugin caching_sha2_password could not be loaded的解决方法,需要的朋友可以参考下
    2023-06-06
  • mysql替换表中的字符串的sql语句

    mysql替换表中的字符串的sql语句

    替换字段里数据内容部分字符串,这个在替换网址呀什么的最经常用了,发布一下做个笔记
    2008-06-06
  • spark rdd转dataframe 写入mysql的实例讲解

    spark rdd转dataframe 写入mysql的实例讲解

    今天小编就为大家分享一篇spark rdd转dataframe 写入mysql的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Mysql中一千万条数据怎么快速查询

    Mysql中一千万条数据怎么快速查询

    很多人在使用Mysql时没有考虑到优化问题,如果遇到上千万数据量的表,查询上千万数据量的时候会发生什么问题,本文就来介绍一下如何快速查询一千万条数据,感兴趣的可以了解一下
    2021-12-12
  • MySQL8.0本地服务器连接不上的问题解决

    MySQL8.0本地服务器连接不上的问题解决

    一个内网内连接mysql会出现提示Host xxx is not allowed to connect to this MySQL server,本文主要介绍了MySQL8.0本地服务器连接不上的问题解决,感兴趣的可以了解一下
    2024-01-01

最新评论