⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

SQL LIMIT 分页

学习 LIMIT 和 OFFSET 分页 · 难度:入门 · +10XP

SQL LIMIT 分页查询

当表中包含成千上万条记录时,一次性查询所有数据会导致严重的性能问题:内存占用过大、网络传输缓慢、页面加载超时。分页查询是解决这个问题的标准方案——每次只获取一小部分数据,就像翻书一样一页一页地查看。SQL 的 LIMITOFFSET 子句就是实现分页的核心工具。

LIMIT 基本语法

SELECT 列名 FROM 表名 LIMIT 行数;
SELECT 列名 FROM 表名 LIMIT 行数 OFFSET 偏移量;

参数说明行数表示每页要返回的记录条数;偏移量表示跳过前面多少条记录。第一页的偏移量为 0。

基础示例

-- 查询前3条记录
SELECT * FROM students LIMIT 3;

-- 跳过前1条,查询后续2条 SELECT * FROM students LIMIT 2 OFFSET 1;

-- 查询分数最高的前3名学生 SELECT * FROM students ORDER BY score DESC LIMIT 3;

-- 查询年龄最小的5名学生 SELECT * FROM students ORDER BY age ASC LIMIT 5;

分页计算公式

在 Web 应用中实现分页时,常用的计算公式如下:

页码LIMITOFFSET 计算公式实际 OFFSET
第1页10(1-1)*10 = 00
第2页10(2-1)*10 = 1010
第3页10(3-1)*10 = 2020

通用公式:OFFSET = (页码 - 1) * 每页条数

不同数据库的语法差异

-- MySQL / PostgreSQL / SQLite
SELECT * FROM students LIMIT 10 OFFSET 20;

-- MySQL 简写(OFFSET 在前时不能用) SELECT * FROM students LIMIT 20, 10; -- OFFSET 20, LIMIT 10

-- SQL Server / MS Access SELECT TOP 10 * FROM students;

-- Oracle(12c之前) SELECT * FROM students WHERE ROWNUM <= 10;

-- Oracle 12c+ SELECT * FROM students FETCH FIRST 10 ROWS ONLY;

性能注意事项

  1. LIMIT 必须配合 ORDER BY 使用,否则结果的顺序不可预测,分页将失去意义
  2. 大 OFFSET 值会导致性能下降(数据库仍需扫描跳过的行),建议使用游标分页(WHERE id > 上次最大id)替代
  3. 先 ORDER BY 再 LIMIT,数据库会先排序全表再截取,排序开销不可避免
  4. 在 ORDER BY 列上建立索引可以显著提升分页查询性能

实战任务

  1. 查询分数排名前 3 名的学生信息
  2. 模拟分页:每页 2 条,分别查询第 1 页和第 2 页的数据
  3. 使用 ORDER BY + LIMIT 找出年龄最小的 3 位学生
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 146 篇
0 完成
🔥 0