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

打印 上一主题 下一主题

主题 1010|帖子 1010|积分 3030

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

1. 使用 LIMIT 和 OFFSET

适用于 MySQL、PostgreSQL 等支持 LIMIT 的数据库。
  1. 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 等支持窗口函数的数据库。
  1. SELECT * FROM
  2.    (
  3.        SELECT *, ROW_NUMBER() OVER (ORDER BY column_name) AS rn FROM table_name
  4.    ) subquery
  5. WHERE rn > 10 AND rn <= 30;
复制代码


  • ROW_NUMBER() 为每一行分配一个唯一的序号。
  • 通过子查询筛选出指定范围的记录。

3. 使用 FETCH FIRST 和 OFFSET

适用于支持 SQL:2008 尺度的数据库,如 SQL Server 和 Oracle 12c。
  1. SELECT * FROM table_name
  2. ORDER BY column_name
  3. OFFSET 10 ROWS
  4. FETCH NEXT 20 ROWS ONLY;
复制代码


  • OFFSET 10 ROWS 跳过前 10 条记录。
  • FETCH NEXT 20 ROWS ONLY 获取接下来的 20 条记录。

4. 使用 TOP 和子查询

适用于 SQL Server 中不支持 OFFSET FETCH 的旧版本。
  1. SELECT TOP 20 * FROM
  2. (
  3.     SELECT TOP 30 * FROM table_name ORDER BY column_name
  4. ) subquery
  5. ORDER BY column_name DESC;
复制代码


  • 内部子查询获取前 30 条记录。
  • 外部查询获取最后 20 条记录(即第 11 到第 30 条)。

5. 使用 LIMIT 和 RANK(SQLite 的变通方法)

SQLite 不支持 OFFSET 时,可以用子查询来实现:
  1. SELECT * FROM table_name
  2. WHERE rowid IN
  3.    (
  4.        SELECT rowid
  5.        FROM table_name
  6.        ORDER BY column_name
  7.        LIMIT 20 OFFSET 10
  8. );
复制代码

总结



  • 保举方法

    • 如果你的数据库支持 LIMIT OFFSET,那是最简朴的方法。
    • 如果使用 SQL Server,OFFSET FETCH 和 ROW_NUMBER() 是更机动的选择。
    • Oracle 数据库可以用 ROW_NUMBER() 或 FETCH 实现。

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

水军大提督

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表