方法/步骤
-
首先选择一张表,最好是独立的表,由于此次操作只涉及到查询,所以也可以使用其他表的字表或者父表,若当前用户下没有任何表,在当前用户有权限的前提下创建一个表,并导入少量数据,示例所用的表结构和数据如图所示
-
-
-
-
第一步,先找出1-最大范围的所有信息。需要注意的事项有:完全查询部分(即select * from test)要取别名;rownum要取别名(至于为什么后面再说)
-
-
有一个经常提到的问题就是:为什么要先查询小于或者小于等于的?不能先查询大于某个界限的呢?
-
-
-
-
这样是查不到数据的,因为oracle对于rownum的分配是这样的:显示获取内层查询结果集,再根据筛选条件,对其分配rownum,从1开始,如图所示,在获取所有数据后,给第一条数据分配rownum为1,由于1<2,所以这条记录剔除,下一个再分配为1,再剔除、、、所有的记录都不会保留;
-
-
-
到这一步,我们已经获取到了前5条记录,那么如何获取3-5的记录?只需要在外层添加一层select语句即可。
-
-
需要注意的是,在外层查询的筛选条件需要使用内层的rownum的别名而不是使用row,这就是为什么在第二步强调要取别名的原因了,因为如果不使用内层rownum的别名,外层查询会重新分配rownum,而外层条件又是">=3",所以就会像第四步一样,取不到任何数据。
-