SQL中如何使用LIMIT限制查询返回数据条数
时间:2026-08-21 | 作者:白桃企划师 | 阅读:0LIMIT并非所有数据库都支持:MySQL和PostgreSQL采用LIMIT n OFFSET m语法(MySQL还有特有LIMIT m,n语法),SQL Server需使用OFFSET m ROWS FETCH NEXT n ROWS ONLY,Oracle 12c+支持与SQL Server相同的语法,旧版则依赖ROWNUM嵌套查询。
LIMIT 不是所有数据库都支持,MySQL 和 PostgreSQL 可用,SQL Server 和 Oracle 需换写法。
MySQL 和 PostgreSQL 中直接用 LIMIT 最简单
这两个数据库对 LIMIT 语法支持一致,写在语句末尾即可:
SELECT * FROM users ORDER BY id DESC LIMIT 10;
这会返回最新 10 条记录。注意:LIMIT 必须放在 ORDER BY 之后,否则排序可能无效;如果没写 ORDER BY,结果顺序不保证。
LIMIT 5表示取前 5 行LIMIT 5 OFFSET 10表示跳过前 10 行,再取 5 行(等价于LIMIT 10, 5,但后者仅 MySQL 支持)- PostgreSQL 不接受逗号写法,必须用
OFFSET
SQL Server 要用 TOP 或 OFFSET FETCH
TOP 最常用,但只能用于查询开头,且不支持跳过行数:
SELECT TOP 10 * FROM users ORDER BY id DESC;
如果要做分页(比如第 3 页,每页 10 条),就得用 OFFSET FETCH:
SELECT * FROM users ORDER BY id DESC OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
OFFSET是跳过的行数,不是页码,第 3 页要算成OFFSET 20(因为前两页共 20 行)FETCH NEXT后必须跟ROWS ONLY,漏掉会报错Incorrect syntax near 'ROWS'- 使用
OFFSET FETCH时,ORDER BY是强制要求,不能省略
Oracle 12c+ 用 FETCH FIRST,旧版本靠 ROWNUM
Oracle 12.1 开始支持标准写法:
SELECT * FROM users ORDER BY id DESC FETCH FIRST 10 ROWS ONLY;
更灵活的分页写法:
SELECT * FROM users ORDER BY id DESC OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
Oracle 11g 或更早版本只能靠嵌套查询 + ROWNUM,但容易出错:
SELECT * FROM (SELECT a.*, ROWNUM rnum FROM (SELECT * FROM users ORDER BY id DESC) a WHERE ROWNUM <= 30) WHERE rnum > 20;
- 外层
WHERE rnum > 20不能直接写成ROWNUM > 20—— 因为ROWNUM是查到就编号,永远从 1 开始,所以必须套两层 - 这个写法性能较差,尤其数据量大时,建议升级到 12c+ 直接用
FETCH FIRST
跨数据库写分页逻辑时,别硬套 LIMIT;不同方言的偏移计算、排序依赖、语法容错性差异很大,最容易出问题的是 OFFSET 值算错或者漏写 ORDER BY —— 这会导致数据重复或丢失。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- LIMIT ZERO BREAKERS序章测试开启时间疑问
- 时间:2026-05-29
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15
