前言
聚合查询、分组查询、联合查询是数据库知识中最重要的一部分,是将表的行与行之间进行运算。
目录
前言
一、聚合查询
(一)聚合函数
1、count
2、sum
3、avg
4、max
5、min
二、分组查询
(一)group by
(二)指定条件筛选
1、分组前筛选,使用where条件
2、分组后筛选,使用having条件
3、同时分组前和分组后筛选
三、联合查询(多表查询)
(一)内连接
(二)外连接
1、左外连接
2、右外连接
3、外连接多个表
(三)自连接
(四)子查询
(五)合并查询 union
四、新增和查询联合
结语
一、聚合查询
(一)聚合函数
函数与括号之间不能有空格
1、count
查询到的数据的数量,null不会计入结果
select count(列名) from 表名;
同时,也可以使用全列查询:
select count(*) from 表名;
2、sum
查询到的数据的总和,null不会计入结果、不是数字没有意义,不能进行全列查询
select sum(列名) from 表名;
3、avg
查询到的数据的平均值,不是数字没有意义,不能进行全列查询
select avg(列名) from 表名;
4、max
查询到的数据的最大值,不是数字没有意义,不能进行全列查询
select max(列名) from 表名;
5、min
查询到的数据的最小值,不是数字没有意义,不能进行全列查询
select min(列名) from 表名;
二、分组查询
(一)group by
指定一个列,把列里面相同的值分为一组进行查询
列如:
同时,select 指定的列,要么是带有聚合函数的,要么是group by 指定的列,不能是一个非聚合非group by 的列,否则查询结果无意义。
(二)指定条件筛选
1、分组前筛选,使用where条件
2、分组后筛选,使用having条件
3、同时分组前和分组后筛选
三、联合查询(多表查询)
联合查询是将多个表结合起来,列如有表emp、表staff,有如下信息:
将该两个表进行笛卡尔积,得到:
此时,列数是两个表的列数之和,行数是两个表的行数之积。
(一)内连接
select *from 表1,表2;
也可以在结合两表时,加一些条件限制表的内容:
select *from 表1,表2 where 条件;
也可以使用join on 表达式,列如:
select *from 表1 join 表2 on 条件;
针对多个表时:
select *from 表1 join 表2 on 条件 join 表3 on 条件;
(二)外连接
可查询数据不是一一对应的若干表,无数据时用null填充
1、左外连接
select *from 表1 left join 表2 on 条件;
以表1为准,表1中所有的数据体现出现
2、右外连接
select *from 表1 right join 表2 on 条件;
以表2为准,表2中所有的数据体现出现
3、外连接多个表
select *from 表1 left/right join 表2 on 条件 left/right join 表3 on 条件;
(三)自连接
自连接就是自己和自己连接,本质就是把行关系转为列关系
自连接需要指定表的别名!!
select *from 表1 as a,表2 as b;
(四)子查询
把多条查询语句合并成一条
列如:
(五)合并查询 union
把两条查询结果合并在一起
select *from 表名 where 条件1 union select *from 表名 where 条件2;
union all 不会去重; union 会自动去重
四、新增和查询联合
把查询结果作为新增的数据
查询结果的数据类型必须和插入表的数据类型匹配(个数、类型)
insert into 表1(列名,列名..) select 列名,列名.. from 表2;
将表2中的数据复制到表1当中。
也可以写成:
insert into 表1 select *from 表2;
结语
SQL查询中各个关键字的执行先后顺序:
from > on > join > where > group by > with > having > select > distinct > order by > limit
这篇博客如果对你有帮助,给博主一个免费的点赞以示鼓励,欢迎各位🔎点赞👍评论收藏⭐,谢谢!!!