DQL续
- 分组查询
- LIMIT
- 语句顺序
分组查询
什么是分组查询
- 将查询结果按照1个或多个字段进行分组,字段值相同的为一组
SELECT sex from stduent GROUP BY sex;
/* 会以sex的值不同分为多少种,相同的归为一类。
每一类中其实有多少条记录还是存在,而不是像去重*/
代码语言:javascript复制SELECT * FROM student GROUP BY sex;
/*
根据sex字段来分组,sex字段的全部值只有两个('男'和'女'),
所以分为了两组
当group by单独使用时,只显示出每组的第一条记录
所以group by单独使用时的实际意义不大*/
代码语言:javascript复制SELECT GROUP_CONCAT(sname) FROM student GROUP BY sex;
/*通过group_concat(字段名),类还是只有两类男和女
即还是两条,但是类中的那个字段名的所有记录都会有显示*/
SELECT sex,GROUP_CONCAT(sno,sname,grade) AS student FROM student GROUP BY sex;
group by 聚合函数
- 通过group_concat()的启发,我们既然可以统计出每个分组的某字段的值的集合,那么我们也可以通过集合函数来对这个"值的集合"做一些操作
使用
代码语言:javascript复制SELECT class,SUM(grade) from student GROUP BY class;
/* 以班分类,求grade字段的和,它的记录也是分为三组去计算*/
代码语言:javascript复制SELECT class,COUNT(*) from student GROUP BY class;
/*统计记录条数,也是分组后,每组有多少条*/
代码语言:javascript复制SELECT class,COUNT(*) from student WHERE grade>=60 GROUP BY class;
/* 筛选后再分组*/
group by having
- 用来分组查询后指定一些条件来输出查询结果
- having作用和where一样,但having只能用于group by
- 相当于是分组后再筛选
SELECT class,SUM(grade) from student GROUP BY class HAVING SUM(grade)>120;
/* 对分组后产生的结果再筛选*/
having与where的区别
- having是在分组后对数据进行过滤.
- where是在分组前对数据进行过滤
- having后面可以使用分组函数(统计函数)
- where后面不可以使用分组函数
- WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。
LIMIT
limit 参数1,参数2;
参数1:起始行号
参数2:查询多少行
0为第一行记录
代码语言:javascript复制SELECT * from student LIMIT 2,3;
分页思路
代码语言:javascript复制/* 通过翻页来查看,每页五行
0-4:第一页
5-9:第二页
10-14:第三页
*/
int nowPage = 1; // 当前页,初始为第一页显示0-4行
int pageTurns = 5;// 一次查询行数
每当翻页{
nowPage ;
SELECT * from student LIMIT (nowPage - 1)*5 , pageTurns;
}
语句顺序
书写顺序
执行顺序