SQL 入门指南:排序与分页查询(ORDER BY 多字段排序、LIMIT 分页实战)

在 SQL 查询中,我们常需要 “按报名时间先后看活动名单”“只看第 2 页的活动报名数据”—— 这些需求靠基础查询无法实现,而ORDER BY(排序)LIMIT(分页) 就是解决这类问题的核心工具。今天我们用 “校园活动报名记录表” 为案例,从零学会排序和分页的用法,代码可直接复制运行,看完就能上手。

我整理了超多的学习资料,包含专业、课程、考试等资源,还有游戏和软件合集

学习资料合集文档https://www.kdocs.cn/l/cjchDXwklk1B

一、先搞懂:为什么需要排序与分页?

先想两个场景:

  1. 学校举办 “校园歌手大赛”,收集到 100 条报名数据,想按 “报名时间从晚到早” 看最新报名的同学,或按 “学院 + 报名时间” 分组排序 —— 这需要ORDER BY;
  1. 报名数据太多,一页显示 20 条,想查看第 2 页(21-40 条)或第 3 页(41-60 条)的数据,避免一次性加载所有数据卡顿 —— 这需要LIMIT。

核心作用:

  • ORDER BY:让查询结果按指定规则排序,避免数据杂乱无章;
  • LIMIT:限制查询结果的行数,实现分页加载,提升效率。

准备案例数据:校园活动报名记录表

我们创建全新的 “校园活动报名记录表”(表名:campus_activity_signup),包含报名 ID、学生信息、活动信息、报名时间等字段,代码可直接运行:

-- 创建校园活动报名记录表
CREATE TABLE campus_activity_signup (signup_id INT PRIMARY KEY AUTO_INCREMENT,  -- 报名ID(自增,唯一标识)student_id CHAR(10) NOT NULL,  -- 学号(如2025001001)student_name VARCHAR(20) NOT NULL,  -- 学生姓名college VARCHAR(30) NOT NULL,  -- 所属学院(如计算机学院、文学院)activity_name VARCHAR(50) NOT NULL,  -- 活动名称(如校园歌手大赛、运动会)signup_time DATETIME NOT NULL,  -- 报名时间signup_status VARCHAR(10) NOT NULL  -- 报名状态(已确认、待确认、已取消)
);-- 插入15条测试数据(覆盖不同学院、活动、报名时间)
INSERT INTO campus_activity_signup (student_id, student_name, college, activity_name, signup_time, signup_status)
VALUES
('2025001001', '张三', '计算机学院', '校园歌手大赛', '2025-09-01 08:30:00', '已确认'),
('2025002001', '李四', '文学院', '校园歌手大赛', '2025-09-01 09:15:00', '已确认'),
('2025003001', '王五', '商学院', '运动会', '2025-09-01 10:00:00', '待确认'),
('2025001002', '赵六', '计算机学院', '运动会', '2025-09-01 10:20:00', '已确认'),
('2025002002', '孙七', '文学院', '校园歌手大赛', '2025-09-02 08:45:00', '待确认'),
('2025003002', '周八', '商学院', '校园歌手大赛', '2025-09-02 09:30:00', '已确认'),
('2025001003', '吴九', '计算机学院', '运动会', '2025-09-02 11:00:00', '已取消'),
('2025002003', '郑十', '文学院', '运动会', '2025-09-03 09:00:00', '已确认'),
('2025003003', '钱十一', '商学院', '校园歌手大赛', '2025-09-03 10:15:00', '待确认'),
('2025004001', '冯十二', '外国语学院', '校园歌手大赛', '2025-09-03 14:20:00', '已确认'),
('2025004002', '陈十三', '外国语学院', '运动会', '2025-09-04 08:50:00', '待确认'),
('2025001004', '褚十四', '计算机学院', '校园歌手大赛', '2025-09-04 09:40:00', '已确认'),
('2025002004', '卫十五', '文学院', '校园歌手大赛', '2025-09-04 10:30:00', '已取消'),
('2025003004', '蒋十六', '商学院', '运动会', '2025-09-05 09:10:00', '已确认'),
('2025004003', '沈十七', '外国语学院', '运动会', '2025-09-05 11:20:00', '待确认');-- 查看表数据(确认插入成功)
SELECT * FROM campus_activity_signup LIMIT 5;

表中数据如下(简化展示):

signup_id

student_id

student_name

college

activity_name

signup_time

signup_status

1

2025001001

张三

计算机学院

校园歌手大赛

2025-09-01 08:30:00

已确认

2

2025002001

李四

文学院

校园歌手大赛

2025-09-01 09:15:00

已确认

3

2025003001

王五

商学院

运动会

2025-09-01 10:00:00

待确认

4

2025001002

赵六

计算机学院

运动会

2025-09-01 10:20:00

已确认

5

2025002002

孙七

文学院

校园歌手大赛

2025-09-02 08:45:00

待确认

二、ORDER BY:实现排序查询

ORDER BY是 SQL 中用于排序的关键字,支持 “单字段排序” 和 “多字段排序”,还能指定 “升序” 或 “降序”。

1. 基础用法:单字段排序(升序 / 降序)

语法:SELECT 字段 FROM 表名 ORDER BY 排序字段 [ASC/DESC];

  • ASC:升序(默认,可省略),比如时间从早到晚、数字从小到大;
  • DESC:降序,比如时间从晚到早、数字从大到小。
例子 1:按报名时间降序,查看最新报名的同学

需求:查看 “校园歌手大赛” 的报名数据,按 “报名时间从晚到早” 排序,显示学生姓名、学院、报名时间。

代码:

SELECT student_name AS 学生姓名,college AS 所属学院,signup_time AS 报名时间
FROM campus_activity_signup
WHERE activity_name = '校园歌手大赛'  -- 只看校园歌手大赛的报名
ORDER BY signup_time DESC;  -- 按报名时间降序(最新的在前)

运行结果(前 5 条):

学生姓名

所属学院

报名时间

卫十五

文学院

2025-09-04 10:30:00

褚十四

计算机学院

2025-09-04 09:40:00

冯十二

外国语学院

2025-09-03 14:20:00

钱十一

商学院

2025-09-03 10:15:00

周八

商学院

2025-09-02 09:30:00

可以看到:最新的报名记录(2025-09-04 10:30)排在最前面,符合 “降序” 需求。

例子 2:按报名状态升序,查看不同状态的报名数据

需求:查看 “运动会” 的报名数据,按 “报名状态(已确认→待确认→已取消)” 升序排序,显示学生姓名、状态、报名时间。

代码:

SELECT student_name AS 学生姓名,signup_status AS 报名状态,signup_time AS 报名时间
FROM campus_activity_signup
WHERE activity_name = '运动会'
ORDER BY signup_status ASC;  -- 按状态升序(默认按字符顺序排序)

运行结果

学生姓名

报名状态

报名时间

赵六

已确认

2025-09-01 10:20:00

郑十

已确认

2025-09-03 09:00:00

蒋十六

已确认

2025-09-05 09:10:00

王五

待确认

2025-09-01 10:00:00

陈十三

待确认

2025-09-04 08:50:00

沈十七

待确认

2025-09-05 11:20:00

吴九

已取消

2025-09-02 11:00:00

解释:字符型字段按 “拼音首字母顺序” 排序,“已确认”(Y)在 “待确认”(D)之后?不对,这里实际是按 “ASCII 码顺序” 排序 ——“待” 的 ASCII 码比 “已” 小,所以 “待确认” 会排在 “已确认” 前面?别纠结细节,记住:想按自定义顺序排序(如 “已确认→待确认→已取消”),后续可学FIELD()函数,入门阶段先掌握基础排序逻辑即可。

2. 进阶用法:多字段排序

当 “单字段排序无法区分顺序” 时,需要用 “多字段排序”—— 先按第一个字段排序,第一个字段相同的,再按第二个字段排序。

例子 3:按 “学院 + 报名时间” 排序,查看同一学院的报名顺序

需求:查看所有活动的报名数据,先按 “学院升序”(同一学院的排在一起),同一学院内按 “报名时间降序”(最新报名的在前),显示学院、学生姓名、活动名称、报名时间。

代码:

SELECT college AS 所属学院,student_name AS 学生姓名,activity_name AS 活动名称,signup_time AS 报名时间
FROM campus_activity_signup
-- 多字段排序:先按学院升序,再按报名时间降序
ORDER BY college ASC, signup_time DESC;

运行结果(计算机学院部分):

所属学院

学生姓名

活动名称

报名时间

计算机学院

褚十四

校园歌手大赛

2025-09-04 09:40:00

计算机学院

吴九

运动会

2025-09-02 11:00:00

计算机学院

赵六

运动会

2025-09-01 10:20:00

计算机学院

张三

校园歌手大赛

2025-09-01 08:30:00

可以看到:所有 “计算机学院” 的学生排在一起,且同一学院内,报名时间晚的(2025-09-04)排在前面,符合 “多字段排序” 的逻辑。

关键规则:ORDER BY后字段的顺序很重要,先按第一个字段排序,第一个字段相同的才会按第二个字段排序,以此类推。

三、LIMIT:实现分页查询

当查询结果有几十、几百条时,一次性显示会很杂乱,用LIMIT可以 “按页显示”,比如每页显示 5 条,查看第 1 页(1-5 条)、第 2 页(6-10 条)等。

1. 基础用法:限制返回行数(LIMIT N)

语法:SELECT 字段 FROM 表名 LIMIT 行数;

作用:只返回查询结果的前 N 行数据。

例子 4:查看 “已确认” 状态的前 3 条报名数据

需求:查看所有 “报名状态为已确认” 的数据,只显示前 3 条,按报名时间降序。

代码:

SELECT student_name AS 学生姓名,activity_name AS 活动名称,signup_time AS 报名时间
FROM campus_activity_signup
WHERE signup_status = '已确认'
ORDER BY signup_time DESC
LIMIT 3;  -- 只返回前3条数据

运行结果

学生姓名

活动名称

报名时间

蒋十六

运动会

2025-09-05 09:10:00

褚十四

校园歌手大赛

2025-09-04 09:40:00

冯十二

校园歌手大赛

2025-09-03 14:20:00

2. 进阶用法:分页查询(LIMIT 偏移量,行数)

语法:SELECT 字段 FROM 表名 LIMIT 偏移量, 每页行数;

  • 偏移量:从第几条数据开始(注意:SQL 中数据从 0 开始计数,不是 1);
  • 每页行数:每页显示多少条数据。
分页公式(重要):

想查看第 M 页,每页显示 N 条数据:

偏移量 = (M - 1) * N,LIMIT 偏移量, N

比如:

  • 第 1 页(1-5 条):M=1,N=5 → 偏移量 = 0 → LIMIT 0, 5;
  • 第 2 页(6-10 条):M=2,N=5 → 偏移量 = 5 → LIMIT 5, 5;
  • 第 3 页(11-15 条):M=3,N=5 → 偏移量 = 10 → LIMIT 10, 5。
例子 5:分页查看所有报名数据(每页 5 条,查看第 2 页)

需求:查看所有报名数据,按报名时间降序,每页显示 5 条,查看第 2 页(6-10 条)。

代码:

SELECT signup_id AS 报名ID,student_name AS 学生姓名,activity_name AS 活动名称,signup_time AS 报名时间
FROM campus_activity_signup
ORDER BY signup_time DESC
-- 第2页,每页5条:偏移量=(2-1)*5=5,所以LIMIT 5,5
LIMIT 5, 5;

运行结果(第 2 页,6-10 条):

报名 ID

学生姓名

活动名称

报名时间

12

褚十四

校园歌手大赛

2025-09-04 09:40:00

11

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921830.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921830.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jodconverter将word转pdf底层libreoffice的问题

近期项目中使用了word转pdf的功能&#xff0c;其中借助了远程服务的jodconverter来处理。 <dependency><groupId>org.jodconverter</groupId><artifactId>jodconverter-remote</artifactId><version>4.4.2</version> </dependen…

【为YOLOv11Seg添加MFC界面】详细指南

要将现有的YOLOv11Seg代码集成到MFC界面中,我们需要创建一个MFC应用程序框架,并将现有的检测逻辑封装到其中。以下是详细步骤: 1. 创建MFC应用程序框架 1.1 使用Visual Studio创建MFC项目 打开Visual Studio,选择"创建新项目" 选择"MFC应用程序"模板…

机器学习03——线性模型(多元线性回归、对数线性回归、二分类、线性判别分析)

上一章&#xff1a;机器学习02——模型评估与选择 下一章&#xff1a;机器学习04——决策树 机器学习实战项目&#xff1a;【从 0 到 1 落地】机器学习实操项目目录&#xff1a;覆盖入门到进阶&#xff0c;大学生就业 / 竞赛必备 文章目录一、线性模型的基本形式&#xff08;一…

qt QLineSeries详解

1、概述QLineSeries是Qt Charts模块中的一个重要类&#xff0c;用于绘制折线图。它是QXYSeries的实现类&#xff0c;将信息显示为由直线连接的一系列数据点。该类为QAbstractSeries的子类&#xff0c;因此可以通过该类来访问QAbstractSeries的所有公共方法和属性。2、重要方法c…

你再也找不到更详细的3DGS教程了 —— 一万九千字长文解析3DGS

参考: https://www.bilibili.com/video/BV1MF4m1V7e3/ https://blog.csdn.net/2401_86810419/article/details/148811121 https://www.bilibili.com/video/BV1cz421872F?t=233.9 https://wuli.wiki/online/SphHar.html https://zhuanlan.zhihu.com/p/467466131 特别指出…

Python,遗传算法与神经网络架构搜索:基于DEAP的自动模型设计

引言&#xff1a;当进化论遇见深度学习——自动化的黎明在深度学习的蛮荒时代&#xff0c;我们是“手工匠人”。我们依靠直觉、前辈的经验&#xff08;ResNet 为什么是152层而不是153层&#xff1f;&#xff09;、大量的试错以及那么一点点玄学&#xff0c;在架构的黑暗森林中摸…

Vue框架技术详解——项目驱动概念理解【前端】【Vue】

Vue3框架 是前端渲染框架浏览器向服务器第一次发送请求&#xff0c;就会将所有页面的样式全部返回到浏览器vue中会将所有js文件最后打包成一个js文件&#xff0c;当前访问其中一个页面时&#xff0c;其他页面的样式也已经返回到浏览器中了&#xff0c;下次切换页面时&#xff…

HTML 网页静态托管 API 接口文档(可集成到智能体Agent)

HTML 网页静态托管 API 接口文档&#xff08;可集成到智能体Agent&#xff09; 接口概述 本接口用于将HTML代码转换为可访问的网页&#xff0c;支持通过API密钥进行身份验证。 API 密钥申请地址&#xff1a; https://www.cuobiezi.net/user/api_keys/apply API接口信息 接…

springboot vue sse消息推送,封装系统公共消息推送前后端方法

概述 1、封装springboot全局的消息推送接口&#xff1b; 注&#xff1a;1&#xff09;由于原生HTML5 EventSource 不支持添加header&#xff0c;所以要把连接创建接口加入身份验证白名单&#xff0c;并在接口内添加自己校验token2&#xff09;后台需定时心跳&#xff0c;保证链…

LeetCode 每日一题 2025/9/1-2025/9/7

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录9/1 1792. 最大平均通过率9/2 3025. 人员站位的方案数 I9/3 3027. 人员站位的方案数 II9/4 3516. 找到最近的人9/5 2749. 得到整数零需要执行的最少操作数9/6 3495. 使数组元…

小迪安全v2023学习笔记(八十讲)—— 中间件安全WPS分析WeblogicJenkinsJettyCVE

文章目录前记服务攻防——第八十天中间件安全&HW2023-WPS分析&Weblogic&Jetty&Jenkins&CVE应用WPS - HW2023-RCE&复现&上线CS介绍漏洞复现中间件 - Weblogic-CVE&反序列化&RCE介绍利用中间件 - Jenkins-CVE&RCE执行介绍漏洞复现CVE-20…

各webshell管理工具流量分析

哥斯拉哥斯拉是一个基于流量、HTTP全加密的webshell管理工具 特点 1.内置了3种Payload以及6种加密器&#xff0c;6种支持脚本后缀&#xff0c;20个内置插件 2.基于java&#xff0c;可以跨平台使用 3.可以自己生成webshell&#xff0c;根据管理来生成一些payload&#xff0c;然后…

pytest(1):fixture从入门到精通

pytest&#xff08;1&#xff09;&#xff1a;fixture从入门到精通前言1. Fixture 是什么&#xff1f;为什么我们需要它&#xff1f;2. 快速上手&#xff1a;第一个 Fixture 与基本用法3. 作用域 (Scope)&#xff1a;控制 Fixture 的生命周期4. 资源管理&#xff1a;Setup/Tear…

Java17 LTS 新特性用例

基于 Java 17 LTS 的 实用示例 以下是基于 Java 17 LTS 的 30 个实用示例,涵盖语言新特性、API 改进及常见场景。所有代码均兼容 Java 17 语法规范。 文本块(Text Blocks) String json = """{"name": "Java 17","type": &qu…

SpringBoot-Web开发-内容协商——多端内容适配内容协商原理HttpMessageConverter

其它篇章&#xff1a; 一&#xff1a;SpringBoot3-日志——日志原理&日志格式&日志级别&日志分组&文件输出&文件归档&滚动切割 二&#xff1a;SpringBoot3-Web开发-静态资源——WebMvcAutoConfiguration原理&资源映射&资源缓存&欢迎页&…

Spring MVC 类型转换与参数绑定:从架构到实战

在 Spring MVC 开发中&#xff0c;“前端请求数据” 与 “后端 Java 对象” 的格式差异是高频痛点 —— 比如前端传的String类型日期&#xff08;2025-09-08&#xff09;要转成后端的LocalDate&#xff0c;或者字符串male要转成GenderEnum.MALE枚举。Spring 并非通过零散工具解…

Spark提交任务的资源配置和优化

Spark 提交任务时主要可调的资源配置参数包括 Driver 资源&#xff08;内存、CPU&#xff09;、Executor 资源&#xff08;数量、内存、CPU&#xff09;以及 集群管理相关参数。配置和优化时一般结合集群硬件资源、数据规模、作业类型和作业复杂度&#xff08;SQL / 机器学习&a…

机器学习06——支持向量机(SVM核心思想与求解、核函数、软间隔与正则化、支持向量回归、核方法)

上一章&#xff1a;机器学习05——多分类学习与类别不平衡 下一章&#xff1a;机器学习07——贝叶斯分类器 机器学习实战项目&#xff1a;【从 0 到 1 落地】机器学习实操项目目录&#xff1a;覆盖入门到进阶&#xff0c;大学生就业 / 竞赛必备 文章目录一、间隔与支持向量&…

AI集群全链路监控:从GPU微架构指标到业务Metric关联

点击 “AladdinEdu&#xff0c;同学们用得起的【H卡】算力平台”&#xff0c;H卡级别算力&#xff0c;80G大显存&#xff0c;按量计费&#xff0c;灵活弹性&#xff0c;顶级配置&#xff0c;学生更享专属优惠。 引言&#xff1a;AI算力时代的监控挑战 随着深度学习模型规模的指…

K8s Ingress Annotations参数使用指南

Kubernetes Ingress Annotations 是与特定 Ingress 控制器&#xff08;如 Nginx、Traefik、HAProxy 等&#xff09;配合使用&#xff0c;用于扩展和定制 Ingress 资源行为的关键配置项。它们通常以键值对的形式添加在 Ingress 资源的 metadata部分。Ingress Annotations参数速查…