第六篇讲述了基本查询和条件查询,这篇是继第六篇的内容讲述单表分组、排序、分页查询和聚合函数
DQL:查询表中的记录
语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
1. 排序查询
语法:
order by 子句
order by 排序字段1 排序方式1 , 排序字段2 排序方式2...排序方式:
ASC: 升序排列 不指定就默认
DESC: 降序排列1) 根据数学成绩查询
SELECT * FROM stu ORDER BY math; -- 默认升序
SELECT * FROM stu ORDER BY math DESC; -- 降序
2) 按照数学成绩排名, 如果数学成绩有一样的, 再按照英语成绩排名
select * from stu order by math asc , english asc;
注意
* 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
每一个不同的排序都可以指定不同的排序方式
select * from stu order by math asc , english desc;2. 聚合函数
1) 聚合函数: 将一列数据作为一个整体,进行纵向的计算。
聚合函数 含义 count 计算个数 1. 一般选择非空的列:主键id
2. count(*)max 计算最大值 min 计算最小值 sum 计算和 avg 计算平均值 注意: * 聚合函数的计算,排除null值。就是说计算的这列数据如果有null,不参与计算也不计数
解决方法:
1. 选择不包含非空的列进行计算,可以选择主键(推荐这种方法)
2. IFNULL函数
2) SELECT MAX(math) FROM stu; -- 求数学的最大值
SELECT MIN(math) FROM stu; -- 求数学的最小值
SELECT SUM(math) FROM stu; -- 求数学的和值
SELECT AVG(math) FROM stu; -- 求数学的平均值
3. 分组查询
1) 语法:group by 分组字段;
2) 注意:
*1 分组之后查询的字段:分组字段、聚合函数
*2 where 和 having 的区别?
子名 作用 where 子句 1) 对查询结果进行分组前, 将不符合 where 条件的行去掉, 即在分组之前过滤数据,
即先过滤再分组。
2) where 后面不可以使用聚合函数having 子句 1) having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。
2) having 后面可以使用聚合函数3) 分组查询实例
-- 按照性别分组。分别查询男、女同学的平均分
SELECT sex , AVG(math) FROM stu GROUP BY sex;
-- 按照性别分组。分别查询男、女同学的平均分,人数
SELECT sex , AVG(math),COUNT(id) FROM stu GROUP BY sex;
-- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组
SELECT sex , AVG(math),COUNT(id) FROM stu WHERE math > 70 GROUP BY sex;
注意分组之后不要加其他的字段,其他字段是没有意义的,例如 name字段 如下展示
-- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后,人数要大于2个人
SELECT sex , AVG(math),COUNT(id) FROM stu WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
聚合函数后面可以跟别名
SELECT sex , AVG(math),COUNT(id) 人数 FROM stu WHERE math > 70 GROUP BY sex HAVING 人数 > 2;
4. 分页查询
1) 语法:
limit 开始的索引,每页查询的条数;
注意 *limit 是一个MySQL"方言"
2) 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数3)每页显示3条记录
SELECT * FROM stu LIMIT 0,3; -- 第1页
SELECT * FROM stu LIMIT 3,3; -- 第2页
SELECT * FROM stu LIMIT 6,3; -- 第3页
<单表查询到此结束>