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;
相关推荐
凉、介2 小时前
ARMv8-A 指令学习
linux·笔记·学习·嵌入式·arm·指令
星恒随风2 小时前
Linux 基础指令(三):grep、压缩打包、系统信息与 Shell 运行原理
linux·笔记·学习
库玛西2 小时前
快速幂算法全景总结图:从“愚公移山”到“细胞分裂”
c语言·c++·笔记·算法
是江迪呀3 小时前
关于记笔记的批评和自我批评
笔记·aigc·ai编程
不会代码的小猴3 小时前
电机学笔记
笔记
程序员老陆4 小时前
FFmpeg 硬解在 Linux 上:从“能跑”到“跑满 GPU”的实战笔记
linux·笔记·ffmpeg
星恒随风4 小时前
Linux 权限详解:从 rwx、chmod 到 umask、目录权限与粘滞位
linux·运维·服务器·笔记·学习
一米阳光866113 小时前
软考(中级)软件设计师核心笔记(3)数据库系统——概念、数据库设计
数据库·笔记·职场发展·软考·软件设计师
漏刻有时14 小时前
PHP GeoJSON转PNG地图渲染程序开发笔记、源码解读、问题复盘与整改方案
android·笔记·php