如何从SQL查询结果中获取指定区间范围的条目数据
SQL查询指定范围结果条目方法
实现范围查询的前提是必须显式指定排序规则,SQL默认返回结果的顺序不固定,不加ORDER BY直接取范围会得到不确定的结果。不同数据库的实现语法如下:
通用SQL:2008标准写法
支持PostgreSQL 13+、MySQL 8.0+、SQL Server 2012+等新版本数据库:
SELECT * FROM images_table WHERE catagory = 'trees' ORDER BY id ASC -- 替换为实际需要的排序字段,比如上传时间、资源ID等 OFFSET 39 ROWS -- 跳过前39条,从第40条开始读取 FETCH NEXT 21 ROWS ONLY; -- 共读取21条,覆盖第40到第60条的全部条目
MySQL 8.0以下 / MariaDB 写法
使用LIMIT语法,第一个参数为偏移量,第二个参数为读取条数:
SELECT * FROM images_table WHERE catagory = 'trees' ORDER BY id ASC LIMIT 39, 21;
Oracle 11g及更早版本写法
通过ROWNUM伪列实现范围过滤:
SELECT * FROM ( SELECT t.*, ROWNUM AS rn FROM ( SELECT * FROM images_table WHERE catagory = 'trees' ORDER BY id ASC ) t WHERE ROWNUM <= 60 ) WHERE rn >= 40;
注意事项
- 排序字段建议选择唯一值字段(比如主键ID),避免出现排序字段值相同导致结果顺序不稳定的问题
- 大多数数据库的偏移量从0开始计数,要从第N条开始读取时,偏移量需要填写
N-1 - 第40条到第60条共包含21条数据,注意不要填错读取条数参数
内容的提问来源于stack exchange,提问作者user3257171
相关产品推荐
相关产品推荐

