MySQL进阶1
分组查询:
分组查询:将查询结果按照1个或多个字段进行分组,字段值相同的为1组
分组使用:
select 列名 from 表名 group by 列名;
当 group by 单独使用时,只显示出每组的第一条记录,所以 group by 单独使用时实际意义不大
在使用分组时,select后面直接跟的字段一般都出现在group by 后
gouup by + group_concat():
group_concat(字段名)可以作为一个输出字段来使用,表示分组之后根据分组结果,使用group_concat()来放置每一组的某字段的值的集合
select 列名1, group_concat(列名2) from 表名 group by 列名1;
group by + 聚合函数:
查询每个部门的部门名称和每个部门的工资和:
查询每个部门的名称以及每个部门的人数:
查询每个部门的部门名称以及每个部门工资大于1500的人数:
group by + having:
用来分组查询后指定一些条件来输出查询结果
having作用和where一样,但having只能用于group by
查询工资总和大于9000的部门名称以及工资总和:
having与where的区别:
having是在分组后对数据进行过滤,where是在分组前对数据进行过滤
having后面可以使用分组函数,where后面则不可以
where是对分组前记录的条件,如果某行记录没有满足where子句的条件,那么这行记录不会参加分组,而having是对分组后的数据进行约束
查询工资大于2000的,工资总和大于6000的部门以及工资总和(降序排列):
书写顺序:select-->from-->where-->group by-->having-->order by-->limit
执行顺序:from-->where-->group by-->having-->select-->order by-->limit
limit:
作用:从哪一行开始,要执行几行
limit 参数1, 参数2 参数1:从哪一行开始查 参数2:一共要查几行
角标从0开始
格式:
select * from 表名 limit 参数1, 参数2;
分页思路:
int currentpage = 1 当前页
int pagesize = 3 每页多少条数据
当前页为1第一页从0开始:(1 - 1) * 1 = 0
当前页为2第二页从2开始:(2 - 1) * 2 = 2
当前页为3第三页从6开始:(3 - 1) * 3 = 6
select * from 表名 limit (currentpage - 1) * pagesize, pagesize;