前言
聚合查询、分组查询、联合查询是数据库知识中最重要的一部分,是将表的行与行之间进行运算。
目录
一、聚合查询
(一)聚合函数
函数与括号之间不能有空格
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
这篇博客如果对你有帮助,给博主一个免费的点赞以示鼓励,欢迎各位🔎点赞👍评论收藏⭐,谢谢!!!