1.2 Rownum分页改写
Rownum是Oracle的一个伪列,是Oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀。
这里先介绍一个基本常识:如果你用>,>=,=,between…and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下条,可是它的rownum还是1,又被删除,依次类推,便没有了数据,所以rownum一般用在<和<=的场景下,才会返回记录。还请读者自行做试验体会。
Rownum在现实应用中还经常用在分页查询,比如查询第1条到第10条记录,此时rownum>=1 and rownum<=10的写法肯定是不能查出记录的,具体原因前面介绍过了。现在关键有两种写法,一种是将rownum 用另外一个别名来代替,比如rn,并包在结果集里,然后由于rn已经是常量,改写成rn>=1 and rn<=10,写法1如下:
drop table test_rownum purge;
create table test_rownum as select * from dba_objects;
select count(*) from test_rownum;
COUNT(*)
111052
alter session set statistics_level=all ;
set linesize 1000
set pagesize 500