当前位置: 首页 > article >正文

在 SQL 中获取第m个开始的n条记录方法汇总

在 SQL 中,要获取第m个开始的n条记录,主要取决于你使用的数据库系统和支持的功能。以要获取第10个开始的20条记录为例说明几种常见的方法:


1. 使用 LIMITOFFSET

适用于 MySQL、PostgreSQL 等支持 LIMIT 的数据库。

SELECT * FROM table_name ORDER BY column_name LIMIT 20 OFFSET 10; 
  • LIMIT 20 表示返回 20 条记录。
  • OFFSET 10 表示跳过前 10 条记录。

2. 使用 ROW_NUMBER() 函数

适用于 SQL Server、Oracle、PostgreSQL 等支持窗口函数的数据库。

SELECT * FROM 
   ( 
       SELECT *, ROW_NUMBER() OVER (ORDER BY column_name) AS rn FROM table_name 
   ) subquery 
WHERE rn > 10 AND rn <= 30; 
  • ROW_NUMBER() 为每一行分配一个唯一的序号。
  • 通过子查询筛选出指定范围的记录。

3. 使用 FETCH FIRSTOFFSET

适用于支持 SQL:2008 标准的数据库,如 SQL Server 和 Oracle 12c。

SELECT * FROM table_name 
ORDER BY column_name 
OFFSET 10 ROWS 
FETCH NEXT 20 ROWS ONLY; 
  • OFFSET 10 ROWS 跳过前 10 条记录。
  • FETCH NEXT 20 ROWS ONLY 获取接下来的 20 条记录。

4. 使用 TOP 和子查询

适用于 SQL Server 中不支持 OFFSET FETCH 的旧版本。

SELECT TOP 20 * FROM 
( 
    SELECT TOP 30 * FROM table_name ORDER BY column_name 
) subquery 
ORDER BY column_name DESC; 
  • 内部子查询获取前 30 条记录。
  • 外部查询获取最后 20 条记录(即第 11 到第 30 条)。

5. 使用 LIMITRANK(SQLite 的变通方法)

SQLite 不支持 OFFSET 时,可以用子查询来实现:

SELECT * FROM table_name 
WHERE rowid IN 
   ( 
       SELECT rowid 
       FROM table_name 
       ORDER BY column_name 
       LIMIT 20 OFFSET 10 
); 

总结

  • 推荐方法
    • 如果你的数据库支持 LIMIT OFFSET,那是最简单的方法。
    • 如果使用 SQL Server,OFFSET FETCHROW_NUMBER() 是更灵活的选择。
    • Oracle 数据库可以用 ROW_NUMBER()FETCH 实现。

根据你的数据库环境选择适合的方法即可。


http://www.kler.cn/a/465978.html

相关文章:

  • JVM学习:CMS和G1收集器浅析
  • 【QED】kouki与阶乘之间的那些事?
  • Linux 内核中网络接口的创建与管理
  • 服务器迁移中心——“工作组迁移”使用指南
  • git 创建tag, 并推送到远程仓库,启动actions构建release自动发布
  • CentOS7安装配置JDK保姆级教程(图文详解)
  • 亚远景-ASPICE与ISO 26262:汽车软件开发与功能安全的协同作用
  • GitHub Actions 工作流编写指南
  • Mysql8主从复制(兼容低高版本)
  • 【AI部署】腾讯云每月1w小时免费GPU获取
  • DBSCAN 聚类 和 gmm 聚类 测试
  • Gitlab-runner 修改默认的builds_dir并使用custom_build_dir配置
  • Milvus×合邦电力:向量数据库如何提升15%电价预测精度
  • ASP.NET Core 中的响应压缩中间件
  • TensorFlow DAY1:基础语法
  • C++ 中如何优雅地返回一个递归闭包函数?
  • 聆听音乐 1.5.9 | 畅听全网音乐,支持无损音质下载
  • 【银河麒麟高级服务器操作系统实例】tcp半链接数溢出分析及处理全过程
  • 【go每日一题】golang异常、错误 {源码、实践、总结}
  • 探索Docker Compose:轻松管理多容器应用
  • RAID磁盘整列
  • cut-命令详解
  • 【Linux】传输层协议UDP
  • CDP集群安全指南-静态数据加密
  • 奇异值分解SVD
  • vue字符串的数字比较大小有问题