0


【MYSQL】聚合查询、分组查询、联合查询

目录

聚合查询

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

聚合函数

count()

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

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

sum()

把查询到的结果相加。

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

avg()

求查询到结果的平均值。

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

max()和min()

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

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

总结

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

分组查询

group by 子句

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

select 列名....from 表名 groupby 列名1, 列名2;


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

having 子句

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

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

联合查询

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

笛卡尔积

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

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

例如:

  • 当使用笛卡尔积的表含有主外键查询时,因为是全排列,必然会产生无效数据,我们就可以使用条件查询,但是必须要使用 表名.列名。
  • 通过指定列查询精简结果集时也需要使用 表名.列名。
  • 可以通过给表名起别名来精简SQL语句。

内连接

两种写法:

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

外连接

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

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

自连接

自连接是指在同一张表连接自身进行查询。
但是必须要对表进行起不同的别名。

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

子查询

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

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

单行子查询

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

多行子查询

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

  • 可以使用in来处理:
  • 可以使用多列包含: 将where条件括号中与返回值一一进行比较
  • 使用[not] exists关键字
select 列名 from 表名 whereexists(select语句);

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

from子句使用子查询

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

合并查询

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

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

标签: mysql 数据库

本文转载自: https://blog.csdn.net/yj20040627/article/details/141070374
版权归原作者 鸽鸽程序猿 所有, 如有侵权,请联系我们删除。

“【MYSQL】聚合查询、分组查询、联合查询”的评论:

还没有评论