DQL续

2019-07-22 16:13:47 浏览数 (1)

DQL续

  1. 分组查询
  2. LIMIT
  3. 语句顺序

分组查询

什么是分组查询

  • 将查询结果按照1个或多个字段进行分组,字段值相同的为一组
代码语言:javascript复制
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
  • 相当于是分组后再筛选
代码语言:javascript复制
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;
}

语句顺序

书写顺序

执行顺序

0 人点赞