关于 rownum

1. Oracle 多个伪列中的一种(不是表的实际列);
2. 返回从表中选择时,返回的行的序列号,第一行为 1,依次递增;
3. rownum 的分配在 order by 之前,所以会被 order by 扰乱;


n 为自然数


1) 获得前 n 行:select * from tb_code where rownum < n 


2) 获得第一行:select * from tb_code where rownum = 1


3) 错误:select * from tb_code where rownum = n  (n>1) 

4) 错误:select * from tb_code where rownum > n  (n>1); 


rownum 只用于向下限制范围!


过程:1) Oracle 解析 SQL 查询条件
      2) 获得满足条件的第一行记录,设定当前行记录的 rownum = 1;
      3) 获得满足条件的第二行记录,设定当前行记录的 rownum = rownum + 1;


所以,当条件限定为 rownum > n 时,2) 步骤始终无法获得,所以查询结果总是空集


也就是说,当查询到第一条记录时,该记录的ROWNUM为1,但条件要求ROWNUM>1,

因此不符合,继续查询下一条;因为前面没有符合要求的记录,因此下一条记录过来后,其ROWNUM还是为1,

如此循环,就不会产生结果。


5) 获得 n < rownum < m 的结果集,需要使用子查询,如下:


select *
  from (select TC.*
              ,ROWNUM as ROWNUM_X
          from TB_CODE TC
         where ROWNUM < m)
 where ROWNUM_X > n

你可能感兴趣的:(关于 rownum)