- Oracle的三层分页指的是在进行分页查询时,使用三种不同的方式来实现分页效果,
- 分别是使用ROWNUM、使用OFFSET和FETCH、使用
ROW_NUMBER() OVER()
使用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进行分页查询的优点是简单易懂,缺点是在查询大量数据时性能较差。
使用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及以上版本中才能使用。
使用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()进行分页查询的优点是灵活性高,可以实现各种不同的分页方式,缺点是语法较为复杂。