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;
相关推荐
chushiyunen3 小时前
欧洲地理笔记
笔记
吃着火锅x唱着歌3 小时前
Effective C++ 学习笔记 条款43 学习处理模板化基类内的名称
c++·笔记·学习
GGMM78910 小时前
VX4B600100 控制板全解析:施耐德 ATV630 变频器核心控制单元详解
笔记·变频器·变频器维修
kdxiaojie11 小时前
Linux USB驱动阅读笔记(1)
linux·笔记·学习·usb
半生过往12 小时前
前端学 Java 课程笔记
java·前端·笔记
九硕智慧建筑一体化厂家12 小时前
楼宇自控|智慧建筑核心引擎!楼宇自控系统,赋能建筑高效低碳运维
运维·人工智能·笔记·智慧城市
GGMM78913 小时前
施耐德 VX5A1HC90110(VX5A1HD9011)ATV61/ATV71 90‑110KW 电源驱动板详解
笔记·变频器·变频器维修
Wang's Blog13 小时前
PostgreSQL笔记48: 全文检索与向量检索的对比与混合检索实践
笔记·postgresql·全文检索
liuyicenysabel14 小时前
Flask 个人站 iProfile 上线笔记(k3s + Nginx + Let‘s Encrypt)
笔记·nginx·flask
深蓝海拓14 小时前
基于QtPy (PySide6) 的PLC-HMI工程项目(十五)后续完善和改进:PLC端数据解析的防粘包、残包、废包、拆包
笔记·学习·plc