Oracle实现分页三种不同的方式
作者:logqq
前言
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分页方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!