前言:
- 学习和使用数据库可以说是程序员必须具备能力,这里将更新关于MYSQL的使用讲解,大概应该会更新30篇+,涵盖入门、进阶、高级(一些原理分析);
- 这一篇是内容较少,主要讲解:聚合函数和简要介绍sql语句执行过程;
- 虽然MYSQL命令很多,但是自己去多敲一点,到后面忘记了,查一下就可以回忆起来使用了;
- 这一系列也是本人学习MYSQL做的笔记,也是为了方便后面忘记查询;
- 参考资料:尚硅谷、黑马、csdn和知乎博客;
- 欢迎收藏 + 关注,本人将会持续更新。
文章目录
课程使用数据文件: 后台私信获取。
聚合函数(统计函数)
SQL 允许对表中的数据进行计算,将一列数据作为一个整体,进行纵向计算。
函数名 | 作用 |
---|---|
MAX(column) | 返回某列的最低值(没有则返回NULL) |
MIN(column) | 返回某列的最高值(没有则返回NULL) |
COUNT(column) | 返回某列的行数(不包括 NULL 值) |
COUNT(*) | 返回被选列行数(包括NULL) |
SUM(column) | 求和 |
AVG(column) | 求平均值 |
👁 注意:
- 其中 COUNT 函数可用于任何数据类型 (因为它只是计数)
- 而 SUM 、AVG 函数都只能对数值类型做计算
- MAX 和 MIN 可用于数值、字符串或是日期时间数据类型。
- 统计该企业员工数量
mysql
mysql> select count(ename) from emp;
+--------------+
| count(ename) |
+--------------+
| 15 |
+--------------+
1 row in set (0.02 sec)
- 统计该企业员工的平均工资
mysql
mysql> select avg(sal) from emp;
+-----------+
| avg(sal) |
+-----------+
| 1988.3333 |
+-----------+
1 row in set (0.00 sec)
- 查询该企业员工的最高工资
mysql
mysql> select max(sal) from emp;
+----------+
| max(sal) |
+----------+
| 5000 |
+----------+
1 row in set (0.00 sec)
- 查询该企业员工的最低工资
mysql
mysql> select min(sal) from emp;
+----------+
| min(sal) |
+----------+
| 800 |
+----------+
1 row in set (0.00 sec)
- 计算所有销售的工资之和
mysql
mysql> select sum(sal) from emp where job='SALESMAN';
+----------+
| sum(sal) |
+----------+
| 5600 |
+----------+
1 row in set (0.00 sec)
MYSQL的运行顺序
MYSQL
中常见的关键字段如下:
- from:从哪些表中筛选;
- on:关联多表查询时,去除笛卡尔积;
- where:从表中筛选的条件;
- group by:分组依据;
- having:在统计结果中再次筛选;
- order by:排序;
- limit:分页。
这些在MYSQL
中执行顺序是不一样的,从书写顺序来看:
mysql
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT...
👀 注意: 这些顺序不能颠倒。
在MYSQL
执行语句过程中,sql执行顺序是:
sql
FROM ...,...-> ON -> (LEFT/RIGNT JOIN) -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT
具体sql执行原理:
- SELECT 是先执行 FROM 这一步的。在这个阶段,如果是多张表联查,还会经历下面的几个步骤:
- 首先笛卡尔积,相当于得到虚拟表 vt(virtual table)1-1;
- 通过 ON 进行筛选,在虚拟表 vt1-1 的基础上进行筛选,得到虚拟表 vt1-2;
- 添加外部行,如果我们使用的是左连接、右链接或者全连接,就会涉及到外部行,也就是在虚拟表 vt1-2 的基础上增加外部行,得到虚拟表 vt1-3。
当然如果我们操作的是两张以上的表,还会重复上面的步骤,直到所有表都被处理完为止,这个过程得到是我们的原始数据。
- 原始数据 得到后,在经过
where
进一步判断,得到新一张虚拟表; - 然后在经过group by、having,又得到新一张虚拟表;
- 接着就是select、distinct,当然这个时候依然会生产虚拟表;
- order by、limit 也都会各自生成新的虚拟表。