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
英文地址,請注明出處:http://en.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參數速查…