oracle实现分页全过程
作者:@zcc@
OracleSQL提供了多种方法来实现分页,包括使用ROWNUM、OFFSET和FETCHFIRST语句,通过这些方法,可以根据需要指定每页的记录数和页码,从而实现高效的分页查询
oracle实现分页
Oracle SQL可以使用ROWNUM和Oracle的伪列功能来实现分页。
1、一个基本的分页查询语句的例子
假设你想从一个名为"my_table"的表中获取第11到20行数据:
SELECT *
FROM (
SELECT
my_table.*,
ROWNUM AS row_num
FROM my_table
WHERE ROWNUM <= 20
)
WHERE row_num >= 11;
这个查询使用子查询和ROWNUM来获取前20行数据,然后在外部查询中使用WHERE条件过滤掉前10行数据,以便只返回第11到20行数据。
请注意:
- 在使用ROWNUM时,需要在子查询中首先选择要使用的行,并将其作为结果的一部分返回。
- 然后在外部查询中,通过WHERE过滤结果。
在程序中使用则可以传入page和size进行分页:
SELECT *
FROM (
SELECT
my_table.*,
ROWNUM AS row_num
FROM my_table
WHERE ROWNUM <= page * size
)
WHERE row_num > ((page-1) * size);实际上就是通过嵌套sql 使用ROWNUM在内层sql确定最大边界,在外层sql确定最小边界;
2、要实现指定页数
你需要知道每页的记录数和要显示的页码。
例如,如果每页显示10条记录,并且你想要显示第3页的记录,那么你需要跳过前20条记录(前两页中的所有记录)并返回10条记录。
以下是一个示例查询,它使用OFFSET和FETCH FIRST语句实现分页和指定页数:
SELECT * FROM my_table ORDER BY my_column OFFSET 20 ROWS FETCH FIRST 10 ROWS ONLY;
在这个例子中,OFFSET子句指定要跳过前20行记录(即前两页中的所有记录),FETCH FIRST子句指定要返回接下来的10行记录(即第3页的记录)。ORDER BY子句用于指定排序顺序。
如果你想要显示不同的页数,只需要将OFFSET和FETCH FIRST子句中的行数根据需要调整即可。
3、要同时指定每页显示条数和页数
你可以使用OFFSET和FETCH FIRST语句结合计算来实现。
以下是一个示例查询,它可以指定每页显示的条数和页数:
SELECT *
FROM (
SELECT
my_table.*,
ROWNUM AS row_num
FROM my_table
ORDER BY my_column
)
WHERE row_num > ((page_number - 1) * page_size)
OFFSET (page_number - 1) * page_size ROWS
FETCH FIRST page_size ROWS ONLY;
在这个查询中,子查询使用ROWNUM分配一个唯一的行号,并按照指定的列名进行排序。
外部查询使用WHERE子句过滤出所需的行,并使用OFFSET和FETCH FIRST语句返回指定的页数和每页的记录数。
page_number变量是指定的页数,page_size变量是每页要显示的记录数。
请注意:
- OFFSET和FETCH FIRST语句的顺序很重要。
- OFFSET必须在FETCH FIRST之前指定,以确保正确地跳过所需的行数。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
