单表查询
1 排序查询
* 语法:order by 子句
order by 排序字段1 排序方式1 , 排序字段2 排序方式2...
SELECT * FROM student ORDER BY score ASC; -- 升序
SELECT * FROM student ORDER BY score DESC ; -- 降序
2 聚合函数 --- 将一列数据作为一个整体,进行纵向的计算。
-- 聚合函数,进行纵向的计算
SELECT COUNT(id) FROM student; -- 计算列个数
SELECT MAX(score) FROM student; -- 最大值
SELECT MIN(score) FROM student; -- 最小值
SELECT SUM(score) FROM student; -- 求和
SELECT AVG(score) FROM student; -- 平均值
* 注意:聚合函数的计算,排除null值。
解决方案:
1. 选择不包含非空的列进行计算
2. IFNULL函数 -- SELECT COUNT(IFNULL(score,0)) FROM student;
3 分组查询
(1). 语法:group by 分组字段;
(2) 注意:
a. 分组之后查询的字段:分组字段、聚合函数
b. where 和 having 的区别?
##. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
##. where 后不可以跟聚合函数,having可以进行聚合函数的判断。
-- 分组查询
-- 按照性别分组,分别查询男、女同学的平均分,人数
SELECT sex,AVG(score),COUNT(id) FROM student GROUP BY sex;
-- 按照性别分组,分别查询分数大于70的男女同学的平均分和人数
SELECT sex,AVG(score),COUNT(id) FROM student WHERE score>70 GROUP BY sex;
-- 按照性别分组,分别查询分数大于70,并且人数大于2的男女同学的平均分和人数
SELECT sex,AVG(score),COUNT(id) FROM student WHERE score>70 GROUP BY sex HAVING COUNT(id)>2;
4 分页查询
1. 语法:limit 开始的索引,每页查询的条数;
2. 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
-- 每页显示3条记录
3. limit 是一个MySQL"方言"
-- 分页查询
SELECT * FROM student LIMIT 0,3 -- 第一页
SELECT * FROM student LIMIT 3,3 -- 第二页