位置:首页 > SQL > SQL中如何使用LIMIT限制查询返回数据条数

SQL中如何使用LIMIT限制查询返回数据条数

时间:2026-08-21  |  作者:白桃企划师  |  阅读:0

LIMIT并非所有数据库都支持: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嵌套查询。

如何使用SQL LIMIT限制返回的数据条数?

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 要用 TOPOFFSET 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 —— 这会导致数据重复或丢失。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多