Oracle实现分页三种不同的方式

 更新时间:2023年08月02日 11:08:24   作者:logqq  
这篇文章主要给大家介绍了关于Oracle实现分页三种不同的方式,oracle分页与MySQL不同,MySQL是用关键字limit进行分页,oracle是根据行号,需要的朋友可以参考下

前言

Oracle的三层分页指的是在进行分页查询时,使用三种不同的方式来实现分页效果,分别是使用ROWNUM、使用OFFSET和FETCH、使用ROW_NUMBER() OVER()

1.使用ROWNUM

ROWNUM是Oracle中一个伪列,它用于表示返回的行的序号。使用ROWNUM进行分页查询的方法是在SELECT语句中加入WHERE子句,并在WHERE子句中指定ROWNUM的取值范围,例如:

SELECT *
FROM (
  SELECT a.*, ROWNUM r
  FROM my_table a
  WHERE ROWNUM <= 30
)
WHERE r >= 20;

上述查询语句的意思是查询my_table表中的前30条记录,然后在这30条记录中取出第20到第30条记录作为结果返回。使用ROWNUM进行分页查询的优点是简单易懂,缺点是在查询大量数据时性能较差。

2.使用OFFSET和FETCH

OFFSET和FETCH是Oracle 12c引入的语法,它们可以更方便地实现分页查询。使用OFFSET和FETCH进行分页查询的方法是在SELECT语句中加入OFFSET和FETCH子句,例如:

SELECT *
FROM my_table
ORDER BY my_column
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;

上述查询语句的意思是对my_table表按照my_column列进行排序,然后取出从第21条记录开始的10条记录作为结果返回。使用OFFSET和FETCH进行分页查询的优点是简单方便,缺点是只有在Oracle 12c及以上版本中才能使用。

3.使用ROW_NUMBER() OVER()

ROW_NUMBER() OVER()是Oracle中一种用于计算行号的函数。使用ROW_NUMBER() OVER()进行分页查询的方法是在SELECT语句中加入ROW_NUMBER() OVER()函数,并在WHERE子句中指定ROW_NUMBER() OVER()的取值范围,例如:

SELECT *
FROM (
  SELECT a.*, ROW_NUMBER() OVER (ORDER BY my_column) r
  FROM my_table a
)
WHERE r BETWEEN 21 AND 30;

上述查询语句的意思是对my_table表按照my_column列进行排序,然后取出第21到第30条记录作为结果返回。使用ROW_NUMBER() OVER()进行分页查询的优点是灵活性高,可以实现各种不同的分页方式,缺点是语法较为复杂。

总结

到此这篇关于Oracle实现分页三种不同的方式的文章就介绍到这了,更多相关Oracle分页方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

最新评论