关于rownum
我们对rownum的认识,很可能是从误区开始的,即认为它代表我们想要查询到的记录的行号,可以通过指定行号的范围,来获得指定的记录,尤其是分页记录。例如,每页100条记录,查询第2页时,指定过滤条件为:rownum > 100 and rownum < 101。
事实上,这种使用方式是错误的。如下图,查询结果为空:
那么,这个rownum到底该如何使用呢?事实上,我们只要把握了它真正的含义,便能获知其正确的使用方法。
rownum是Oracle对返回的结果集添加的一个虚拟的行号,从1开始。也就是说,先要有结果集,才有行号。我们想要进行分页查询或指定范围查询时,必须先构造结果集。
用法示例
有了如上认知之后,那么,rownum的使用也就不言而喻了。同样是每页100条记录,我们想要查询第2页的记录时,构造如下SQL语句即可:
select * from
(select rownum as rw,t.* from t_jcrz t where rownum < 201) t1
where t1.rw > 100;
即:内层指定前200条记录,外层指定行号大于100的记录,即可。
总结
先查询带行号的前若干条,再在结果集中取指定记录。