[toc]
## 聚合函数
求和、求平均数、求最大值、最小值、四舍五入、总记录数(不包含null)
### SUM
```
计算ID=1的学生的的总分
select SUM(grade) as '总分' from score where student_id = 1;
```
### AVG
```
计算ID=1的学生的的平均分
select AVG(grade) as '平均分' from score where student_id = 1;
```
### MAX、MIN
```
计算ID=1的学生的的平均分
select AVG(grade) as '平均分',MAX(grade) 最高分,MIN(grade) 最低分 from score where student_id = 1;
```
### ROUND
ROUND(...,n)
### 关于count
- 若select的字段对应的记录的信息为null,count是不会算的
- count中若是一个常量,会添加一列
```
SELECT COUNT(1) FROM score
```
## 分组
分组查询就是按某列的值进行分组,相同的值分成一组,然后可以对此组内进行求平均、求和等计算
>语法:
>SELECT 列名,查询表达式
FROM <表名>
WHERE <条件>
GROUP BY <分组字段>
HAVING 分组后的过滤条件
ORDER BY 列名 [ASC,DESC]
LIMIT 偏移量,条数
### 注意事项
>having 过滤的是分组后得到的列表里的
>SELECT列表中只能包含:
>- 被分组的列
>- 为每个分组返回一个值的表达式,如聚合函数
![](http://img.zhufengpeixun.cn/splitgroup.png)
## 子查询
### 比较运算与子查询
![](https://box.kancloud.cn/a150a8ff6d871a302661a1c9076be897_723x163.png)
### all 与 子查询
大于最大值
![](https://box.kancloud.cn/102cc575ae4ef1091a5036fd34eba74f_959x263.png)
等于`select MAX(age) from...`
### any
ALL 全部
```
from student WHERE age = ANY (SELECT age FROM student WHERE province = '陕西省')
```
### some
SOME 某些
```
SELECT * from student WHERE age = SOME (SELECT age FROM student WHERE province = '陕西省')
```
### in/not in;exists/not exists
## 表连接
### 连接类型
- JOIN=INNER JOIN=CROSS JOIN 内连接
- LEFT [OUTER] JOIN 左外连接
- RIGHT [OUTER] JOIN 右外连接
- ON 连接条件
![](http://img.zhufengpeixun.cn/tablejoin.jpg)
### 内连接
两种写法
![](https://box.kancloud.cn/b8a0377d65af41fc96bb5c18932839fc_664x142.png)