1. 排序查询
语法
- order by 子句:order by 排序字段1 排序方式1 ,排序字段2 排序方式2…
排序方式
- ASC:升序,默认的。
- DESC:降序。
注意
如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
-- 排序方式
SELECT * FROM student ORDER BY math ASC; -- 升序【不写ASC也是】
SELECT * FROM student ORDER BY math DESC; -- 降序
-- 按照数学成绩排名,若数学成绩相同,则按照英语成绩排名
SELECT * FROM student ORDER BY math ASC, english ASC;
2. 聚合函数
将一列数据作为一个整体,进行纵向的计算。
计算个数:count
- 一般选择非空的列:主键
- count(*)
SELECT COUNT(english) FROM student;
SELECT COUNT(IFNULL(english,0)) FROM student;
SELECT COUNT(*) FROM student;
SELECT COUNT(id) FROM student; -- 主键名
计算最大值:max
SELECT MAX(math) FROM student;
计算最小值:min
SELECT MIN(math) FROM student;
计算和:sum
SELECT SUM(math) FROM student;
计算平均值:avg
SELECT AVG(math) FROM student;
注意
聚合函数的计算,要排除null值。
- 选择不包含非空的列进行计算
- IFNULL函数
3. 分组查询
语法
- group by 分组字段;
-- 按照性别分组,分别查询男女同学平均分
SELECT sex, AVG(math) FROM student GROUP BY sex;
-- 按照性别分组,分别查询男女同学平均分、人数
SELECT sex, AVG(math), COUNT(id) FROM student GROUP BY sex;
-- 按照性别分组,分别查询男女同学平均分、人数 要求:分数低于70的人,不参与分组
SELECT sex, AVG(math), COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
注意
- 分组之后查询的字段:分组字段、聚合函数
- 分组之后不要加入其它字段,否则分组没意义
where 和 having 的区别
where
在分组之前进行限定,如果不满足条件,则不参与分组。having
在分组之后进行限定,如果不满足结果,则不会被查询出来。where
后不可以跟聚合函数,having可以进行聚合函数的判断。
代码演示:
-- 按照性别分组,分别查询男女同学平均分、人数 要求:分数低于70的人,不参与分组,分组之后,组内人数要大于两人
SELECT sex, AVG(math), COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
优化写法:
SELECT sex, AVG(math), COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;
4. 分页查询
语法
limit
开始的索引,每页查询的条数:如:LIMIT 0,3
公式
- 开始的索引 = (当前的页码 - 1) * 每页显示的条数
注意
- limit 是一个MySQL"方言",只对mysql数据库生效
SELECT * FROM student LIMIT 0,3; -- 第1页
SELECT * FROM student LIMIT 3,3; -- 第2页
SELECT * FROM student LIMIT 6,3; -- 第3页