MYSQL聚合查询、分组查询、联合查询举例详解
目录
- 聚合查询
- 聚合函数
- count()
- sum()
- avg()
- max()和min()
- 总结
- 分组查询
- group by 子句
- having 子句
- 联合查询
- 笛卡尔积
- 内连接
- 外连接
- 自连接
- 子查询
- 单行子查询
- 多行子查询
- from子句使用子查询
- 合并查询
- 总结
聚合查询
聚合查询就是针对表中行与行之间的查询。
聚合函数
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(http://www.devze.com列名) | 返回查询到的数据的 最小值,不编程客栈是数字没有意义 |
分组查询
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 jojsin 表2 as 别名2 on 条件;#右外连接,表2全显示 select 列名 from 表1 as 别名1 left join 表2 as 别名2 on 条件;#左外连接,表1全显示
自连接
自连接是指在同一张表连接自身进行查询。
但是必须要对表进行起不同的别名。
select 列名 from 表名 as 别名1,表名 as 别名2 where 条件js and 其它条件; select 列名 from 表名 as 别名1 join 表名 as 别名2 on 条件 and 其它条件;
子查询
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。
select 列名 from 表名 where 列 = (select语句 );#例子
单行子查询
作为条件的子查询语句返回值只有一行数据。
多行子查询
作为条件的子查询语句返回值有多行行数据。
- 可以使用in来处理:
- 可以使用多列包含:将where条件括号中与返回值一一进行比较
- 使用[not] exists关键字
select 列名android from 表名 where exists (select语句);
后面查询语句返回结果集为空就不执行前面的查询语句,反之不为空执行。
from子句使用子查询
在from子句中使用子查询:子查询语句出现在from子句中。
把一个子查询当做一个临时表使用。合并查询
为了合并多个select的执行结果,可以使用集合操作符 union,union all。
使用union 和union all时,前后查询的结果集中,字段需要一致。- union操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。
- union all 操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。
总结
到此这篇关于mysql聚合查询、分组查询、联合查询的文章就介绍到这了,更多相关MYSQL聚合查询、分组查询、联合查询内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论