如何跳过/偏移 Oracle 数据库中的行?

Ant*_*Iva 1 sql oracle

我正在为 Oracle DB(版本 9)编写一个非常简单的查询。

不知何故,我可以得到前 5 行:

select * from cities where rownum <= 5

但是跳过 5 行会返回一个空结果:

select * from cities where rownum >= 5

使用:

  • Oracle SQL 开发人员
  • Oracle 数据库版本 9

为什么第二个查询返回空结果?

Mil*_*adi 5

在 Oracle Database 12c(第 1 版)及更高版本中,您可以非常简单地执行此操作,跳过 5 行:

SELECT * FROM T OFFSET 5 ROWS
Run Code Online (Sandbox Code Playgroud)

并跳过 5 行并取 15 行:

SELECT * FROM T OFFSET 5 ROWS FETCH NEXT 15 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)


Jos*_*rge 4

您可以使用以下查询跳过前 n 行。

select * from (
 select rslts.*, rownum as rec_no from (
  <<Query with proper order by (If you don't have proper order by you will see weird results)>>
 ) rslts
) where  rec_no > <<startRowNum - n>>
Run Code Online (Sandbox Code Playgroud)

上面的查询类似于下面的分页查询。

select * from (
 select rslts.*, rownum as rec_no from (
  <<Query with proper order by (If you don't have proper order by you will see weird results)>>
 ) rslts where  rownum <= <<endRowNum>>
) where  rec_no > <<startRowNum>>
Run Code Online (Sandbox Code Playgroud)

您的城市查询:

select * from (
 select rslts.*, rownum as rec_no from (
  select * from cities order by 1
 ) rslts
) where  rec_no > 5 <<startRowNum>>
Run Code Online (Sandbox Code Playgroud)

注意:假设城市表中的第一列是唯一键