MySql--多表查询及聚合函数总结

建议先阅读MySql--增删改查表设计总结-CSDN博客

目录

建议先阅读MySql--增删改查表设计总结-CSDN博客

一、聚合函数

二、GROUP BY 分组查询

HAVING子句

三、联合查询(表连接查询)

1.内连接

2.表连接的执行过程

3.外连接

4.自连接

5.子查询

6.合并查询

四、SQL语句中各部分的执行顺序


一、聚合函数

  1.COUNT(列||*):统计结果的个数。

  2.SUM(列):求和。

  3.AVG(列):求平均值。

  4.MIN(列) 最小值。

  5.MAX(列) :最大值。

二、GROUP BY 分组查询

  对某一个字段进行分组操作,分组后可以结合聚合函数进行一些运算。

HAVING子句

  对GROUP BY的结果进行过滤

三、联合查询(表连接查询)

1.内连接

  select * from table1,table2 where table1.xxx=table2.xxx;

  select * from table1 join table2 on table1.xxx=table2.xxx;

   select * from table1 inner join table2 on table1.xxx=table2.xxx;

2.表连接的执行过程

  1.先计算参与表连接的笛卡尔积

  2.通过连接条件过滤无效数据

  3.加入查询条件得到想要的结果行

  4.精简列名得到最终想到查询的列

3.外连接

 select * from table1 left join table2 on table1.xxx=table2.xxx;

 select * from table1 right join table2 on table1.xxx=table2.xxx;

左外连接以左表为基准,左边的表中所有的数据全部显示,右表中没有对应的记录用NULL填充

右外连接以右表为基准,右边的表中所有的数据全部显示,左表中没有对应的记录用NULL填充

主要应用在两张表数据不一致的场景中。

4.自连接

  select * from table1.t1,table1.t2 where t1.xxx=t2.xxx;

  把行转换成列,在查询的时候可以用where进行条件过滤,实现行与行之间的比较。

5.子查询

单行子查询 select * from table1 where id=(select id from table2 where clo=xxx);

多行子查询 select * from table1 where id in (select id from table2 where clo=xxx);

内层查询的结果作为外层查询的条件,把多条语句合并为一条执行

子查询可以无限嵌套,层数过多会影响效率。

6.合并查询

select * from table1 union select * from table2;

select * from table1 union all select * from table2;

作用是把两个结果集合并成一个返回。

注意:合并查询时多个查询的查询列表必须匹配,MySql不对结果做校验,写的时候务必注意。

四、SQL语句中各部分的执行顺序

 我们自己随便构造一条sql,不一定可以执行,但是相关的关键字都包含:

select distinct id,name,avg(age) from student where class_id=1 join class on student.class_id=class.id group by student.id having avg(age)>0 order by student.id asc limit 100;

FROM -->JION ON -->WHERE -->GROUP BY -->HAVING -->SELECT ---> DISTINCT -->ORDER BY --> LIMIT

你可能感兴趣的:(Mysql,mysql,数据库,数据结构)