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遵循这个顺序)

select → from → where → group by → having → order by → limit

数据库真实执行顺序

from → where → group by → having → select → order by → limit

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;
相关推荐
做运维的阿瑞1 小时前
mysql数据库视图笔记:创建、修改、删除与适用场景
数据库·笔记·mysql
@Mike@1 小时前
12-数据库学习笔记(五种连接算法)
数据库·笔记·学习
韩明君1 小时前
alacrity学习笔记
笔记·学习
坤坤子吖2 小时前
Python基础语法学习:函数
开发语言·笔记·python·学习
91刘仁德2 小时前
HTTPS 加密原理与 CA 数字证书:从对称加密到完整通信流程
网络·笔记·网络协议·http·https
云杂项2 小时前
Adversarial Neural Network Inversion via Auxiliary Knowledge Alignment(个人笔记)
笔记
一隅论数智2 小时前
给AI找对“富矿“:本体协同的六大应用模式与落地战法
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
糖炒栗子03263 小时前
深度学习笔记-FCN
笔记
星恒随风3 小时前
Linux开发工具详解(二):Git版本控制、GitHub协作与GDB调试实战
linux·笔记·git·学习·github
by2099913 小时前
学会使用std::string类,并理解其内部是如何管理字符串的详细阐述(上)
c++·笔记·字符串·类和对象·string