MySQL数据库增删改查进阶(联合查询聚合查询)

发布于:2023-01-22 ⋅ 阅读:(224) ⋅ 点赞:(0)

目录

一、新增

二、聚合查询

 1、聚合函数

1.count

2、分组查询group by

3、分组查询里的条件筛选having

 三、联合查询

1、笛卡尔积

2、内连接

3、自连接

4、子查询

 5、合并查询


一、新增

将一个表中的几列数据插入另一个新表

语法:insert into 待插入的表(对应的列) select 要插入对应的列 from 旧表:

比如有一个学生表 ,要将一班的学生重新插入到一班的学生表

 

 使用上述语法就可以实现

要注意的时新表待插入的列数据类型应该与旧表里要插入的数据类型相同

二、聚合查询

 1、聚合函数

函数 用法
count 返回查询到的数据的量
sum 返回查询到的数据的总和
avg 返回查询到的数据的平均值
max 返回查询到的数据里的最大值
min 返回查询到的数据里的最小值

1.count

语法:select  count(*)  from 表名;

           select count(0) from 表名;

           select count(列) from 表名;

 2.sum

语法:select sum(列) from 表名;

 null不参与计算,其他集合聚合函数同理

2、分组查询group by

语法:select 列 from 表名 group by 列;

使用group by查询时需要满足select的字段得是分组依据的字段,要想出现其他字段时必须搭配聚合函数

 查询一个学生表里有哪些班级时可以

 查询一个学生表里每个班级有多少人时使用聚合函数与分组查询

由此可见1班有5人,2班有6人,如果要查询人数超过5人的班级时要怎么做,这里的条件不像之间一样使用where而是另一个having

3、分组查询里的条件筛选having

语法:select 列 from 表名 group by 列 having 条件; 

比如查询人数超过5人的班级时

 

 三、联合查询

1、笛卡尔积

笛卡尔积就是两张表的记录进行排列组合,排列组合之后就会形成一张新表,我们查询时对这张新表加入一系列的连接条件与其他条件就可以得到我们想要得到的数据,笛卡尔积之后的行数就是两个表行数相乘,列数就是相加

语法:select  * from 表1,表2;

2、内连接

语法:select 字段 from 表1 join 表2 on 连接条件 and 其他条件;

           select 字段 from 表1,表2 where 连接条件 and 其他条件; 

比如有一张学生表与一张成绩表,此时需要我们查询同学A的成绩时 

这是两个表的字段

在查询同学的相信时,我们可以利用联合查询进行查询

第一步:先写笛卡尔积

第二步:加连接条件

 第三步:加其他条件

这样我们就可以看到同学的成绩信息,现在如果要查询这位同学的总成绩时,只需要使用前面聚合查询里的分组查询即可

3、自连接

语法:select * from 表1 as 别名,表1 as 别名 where 连接条件 and 其他条件;

自连接就是自己与自己连接,顾名思义 就是自己与自己进行笛卡儿积,然后再根据连接条件和其他条件进行筛选,比如我们要想知道学科id为1 的成绩比学科id为2成绩高的人的信息,就可以使用自链接

 这样我们就就能查出来这位同学的学科1成绩大于学科3

4、子查询

语法:select * from 表名 where 后面查询结果对应列=(select 查询列 from 表名 where 查询条件);

注意》:括号里只能返回一条数据,把多个查询语句组合成一个查询语句,类似于套娃

比如要查询与许仙同学同一个班级的同学就可以先查询到许仙 同学的班级id然后再接收作为外层查询条件进行查询

 5、合并查询

语法:select * from 表  where 条件 union (all可加可不加,不加去重,加了不去)  union select * from 表 where 条件 

类似于or但不同的是,or只能在一个表里查询,而这个可以在不同的表里查 

本文含有隐藏内容,请 开通VIP 后查看