DQL续
分组查询
什么是分组查询
SELECT sex from stduent GROUP BY sex;
/* 会以sex的值不同分为多少种,相同的归为一类。
每一类中其实有多少条记录还是存在,而不是像去重*/
SELECT * FROM student GROUP BY sex;
/*
根据sex字段来分组,sex字段的全部值只有两个('男'和'女'),
所以分为了两组
当group by单独使用时,只显示出每组的第一条记录
所以group by单独使用时的实际意义不大*/
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 + 聚合函数
使用
SELECT class,SUM(grade) from student GROUP BY class;
/* 以班分类,求grade字段的和,它的记录也是分为三组去计算*/
SELECT class,COUNT(*) from student GROUP BY class;
/*统计记录条数,也是分组后,每组有多少条*/
SELECT class,COUNT(*) from student WHERE grade>=60 GROUP BY class;
/* 筛选后再分组*/
group by + having
SELECT class,SUM(grade) from student GROUP BY class HAVING SUM(grade)>120;
/* 对分组后产生的结果再筛选*/
having与where的区别
LIMIT
limit 参数1,参数2;
参数1:起始行号
参数2:查询多少行
0为第一行记录
SELECT * from student LIMIT 2,3;
分页思路
/* 通过翻页来查看,每页五行
0-4:第一页
5-9:第二页
10-14:第三页
*/
int nowPage = 1; // 当前页,初始为第一页显示0-4行
int pageTurns = 5;// 一次查询行数
每当翻页{
nowPage++;
SELECT * from student LIMIT (nowPage - 1)*5 , pageTurns;
}
语句顺序
书写顺序
执行顺序