1.排序
ASC: 升序,默认的情况下就是升序
DESC: 如果要降序,指明为DESC
2.单列排序
SELECT * FROM 表名 ORDER BY 列 (ASC|DESC)
3.添加条件根据查询结果排序
SELECT * FROM 表名 WHERE 条件 ORDER BY 列 (ASC|DESC)
4.多列排序
SELECT * FROM 表名 WHERE 条件 ORDER BY 列 (ASC|DESC),列 (ASC|DESC)
5.如果你要排序的列是中文,我们先要将排序的列指明为GBK编码,然后再排序
SELECT * FROM stu WHERE age !=0 ORDER BY convert(name USING gbk);
6.限定查询
如果LIMIT 后面只跟了一个数字,表示限制返回多少条,并且从第一条开始。
SELECT * FROM studentinfo LIMIT 6; => SELECT * FROM studentinfo LIMIT 0,6;
如果LIMIT 后面只跟了两个数字,第一个数字表示偏移量(不包含当前数字对应的这一行),后一个数字表示限制返回多少条
SELECT * FROM studentinfo LIMIT 6,6;
7.聚合函数
AVG:求某一列平均值
COUNT:统计总行数
SUM:计算列总和
MIN:求某一列的最小值
MAX:求某一列的最大值
AVG:求某一列平均值
SELECT AVG(age) FROM 表名;
MIN:求某一列最小值
SELECT MIN(age) as minage FROM 表名;
求返回多少条信息
SELECT COUNT(*) FROM 表名;
求某一列最大值
SELECT MAX(age) FROM 表名;
求某一列总和
SELECT SUM(age) FROM 表名;
DISTINCT去重,只计算不同的值。
SELECT SUM(DISTINCT age) FROM 表名;
8.GROUP BY
分组 GROUP BY,单单只是用分组没有意义
分组跟聚合函数的使用,统计每一个分组下有多少人(有多少条记录)
SELECT count(*) as total,age FROM studentinfo GROUP BY age;
9.group by 与 group_concat(列)
group_concat(字段名)可以作为一个输出字段来使用,
表示分组之后,根据分组结果,使用group_concat()来放置每一组的某字段的值的集合
SELECT gender,group_concat(student_name),group_concat(age) FROM studentinfo GROUP BY gender;
group by + with rollup
在最后新增一行,来记录当前列里所有记录的总和
SELECT gender,count(*) FROM studentinfo GROUP BY gender with rollup;
10.HAVING:根据条件过滤结果
HAVING跟WHERE功能一致,他们的区别:WHERE是根据条件筛选结果(行)。
HAVING同样是根据条件筛选结果,不过它是在已有结果的基础之上再进一步筛选(组)。
使用having过滤分组,每个分组下的记录(行)大于2,才返回
SELECT count(),age FROM studentinfo GROUP BY age HAVING count() >2;
跟order by 配合使用
SELECT count(*),age,gender FROM studentinfo GROUP BY age,gender HAVING gender=1 ORDER BY age DESC;
查询语句的顺序:
SELECT
列,列
FROM
表名
WHERE
条件
GROUP BY
列,列
HAVING
条件
ORDER BY
列 (ASC|DESC)
LIMIT start,count