DQL 分组查询、分页查询 技术笔记

一、分组查询 group by

分组:将数据表记录按照指定字段进行分组,常搭配聚合函数完成分组统计。

1.基础语法

sql 复制代码
select 分组字段/聚合函数
from 表名
[where 条件]
group by 分组列名 [having 条件]
[order by 排序字段];

重要规则

  1. select 后尽量不要使用 *,分组后*只会显示每组第一条数据,业务上无意义;
  2. select 后面只允许写分组字段聚合函数
  3. 执行顺序:
    ① where 过滤原始表数据 → ② group by 分组 → ③ having 过滤分组之后的数据

代码示例

sql 复制代码
-- 示例1:按照性别分组,统计每种性别的学生人数
select stu_gender,count(stu_num) from stus group by stu_gender;

-- 示例2:按照性别分组,计算每组学生平均年龄
select stu_gender,avg(stu_age) from stus group by stu_gender;

-- 示例3:按年龄分组,统计每组人数,筛选人数大于1的分组,按年龄升序
select stu_age,count(stu_num)
from stus
group by stu_age
having count(stu_num)>1
order by stu_age;

-- 示例4:先筛选男生,按年龄分组,筛选人数大于1的分组,年龄升序排列
select stu_age,count(stu_num)
from stus
where stu_gender='男'
group by stu_age
having count(stu_num)>1
order by stu_age;

where 和 having 核心区别

  • where:分组前过滤原始数据,不能识别聚合函数
  • having:分组后过滤分组结果,可以使用聚合函数

二、分页查询 limit

数据量较大时,分段返回数据,实现分页展示。

1.语法格式

sql 复制代码
select ...
from ...
where ...
limit param1,param2;
  • param1:起始索引,从0开始
  • param2:查询返回的记录条数

分页通用公式

已知:pageNum 当前页码,pageSize 每页条数

sql 复制代码
select * from stus [where ...] limit (pageNum-1)*pageSize,pageSize;

代码示例

场景:数据表共10条数据,每页展示3条

sql 复制代码
-- 第1页 (1-1)*3 = 0
select * from stus limit 0,3;

-- 第2页 (2-1)*3 = 3
select * from stus limit 3,3;

-- 第3页 (3-1)*3 = 6
select * from stus limit 6,3;

-- 第4页 (4-1)*3 = 9
select * from stus limit 9,3;

三、DQL完整语句顺序(重点)

书写顺序(开发写SQL遵循这个顺序)

selectfromwheregroup byhavingorder bylimit

数据库真实执行顺序

fromwheregroup byhavingselectorder bylimit

sql 复制代码
-- 完整DQL标准模板示例
select stu_gender,avg(stu_age) avg_age
from stus
where stu_age >= 16
group by stu_gender
having avg_age > 18
order by avg_age desc
limit 0,2;
相关推荐
kaixin_啊啊1 小时前
中国研究生数学建模竞赛(华为杯)学习笔记——三维瀑布图绘图代码
笔记·学习·数学建模
动词ing1 小时前
【学习笔记】数据结构(链表合并 双指针合并有序链表)
数据结构·笔记·学习
问心无愧05132 小时前
ctf show web 178
前端·笔记
ljt27249606612 小时前
Vue笔记--路由
javascript·vue.js·笔记
疯狂打码的少年3 小时前
【计算机网络】网络互连设备(中继器 / 网桥 / 交换机 / 路由器 / 网关)
网络·笔记·计算机网络·智能路由器
ljt27249606613 小时前
Vue笔记--状态管理
前端·vue.js·笔记
John_ToDebug11 小时前
判断力无法被 AI 替代,但它正在被你亲手扔掉
经验分享·笔记
柳鲲鹏12 小时前
运气学概论:提纲草案
笔记
疯狂打码的少年15 小时前
【计算机网络】子网掩码与子网划分计算(含CIDR表示法)
服务器·笔记·计算机网络·php
自小吃多16 小时前
PCB Editor软件复制、改变、删除操作笔记
笔记·嵌入式硬件