Oracle分页查询过程的简单实现

在编写分页查询的过程中,我们需要细化每个步骤,并理解分页查询的原理和步骤。 选择合适的表 首先,我们需要选择一张表进行分页查询。最好选择一张独立的表,但如果只涉及到查询操作,也可以使用其他表的子表

在编写分页查询的过程中,我们需要细化每个步骤,并理解分页查询的原理和步骤。

选择合适的表

首先,我们需要选择一张表进行分页查询。最好选择一张独立的表,但如果只涉及到查询操作,也可以使用其他表的子表或者父表。如果当前用户下没有任何表,在当前用户有权限的前提下,我们可以创建一张表并导入少量数据作为示例。

找出所有信息

第一步是找出1至最大范围的所有信息。在这一步中,我们需要注意以下几点:

  • 对于完全查询部分(即SELECT * FROM table),需要给其取一个别名。
  • 对于rownum(行号)也需要取一个别名(为什么后面会解释)。

查询小于等于的数据

经常会有这样一个问题:为什么要先查询小于等于某个界限的数据?不能先查询大于某个界限的数据吗?事实上,如果我们先查询大于某个界限的数据,是查不到任何数据的。

这是因为Oracle对于rownum的分配是这样的:先获取内层查询结果集,再根据筛选条件对其分配rownum。rownum从1开始,依次分配给每一条记录。如图所示,在获取所有数据后,给第一条数据分配rownum为1,由于1 < 2(我们查询的范围是1至最大范围),所以这条记录被剔除。接着,再给下一条记录分配rownum为1,再次剔除...这样所有的记录都不会保留下来。

获取指定范围的记录

到了这一步,我们已经获取到了前5条记录。现在我们需要获取3至5的记录。只需要在外层添加一层SELECT语句即可。

需要注意的是,在外层查询的筛选条件中,我们需要使用内层rownum的别名而不是直接使用rownum。这是为什么在第二步强调要取别名的原因。如果我们不使用内层rownum的别名,外层查询会重新分配rownum,而外层条件又是 > 3,所以就会像第四步一样,无法获取任何数据。

新Oracle分页查询实现方法详解
标签: