ITPub博客

首页 > Linux操作系统 > Linux操作系统 > rownum 的一点儿研究

rownum 的一点儿研究

原创 Linux操作系统 作者:杨奇龙 时间:2010-10-23 23:10:19 0 删除 编辑
rownum 是oracle提供的一个用来得到结果集每行的行号的伪列。
做如下测试:
一 当where 和 rownum 在同一行时 rownum不能和 > ,>= (>=1 可以) = 这些算术运算符连用,当使用分页查询时可以!                                           
SQL> select rownum ,ename from emp where rownum  >=1;
    ROWNUM ENAME                                                               
---------- --------------------------------------------------                  
         1 SMITH                                                               
         2 ALLEN                                                               
         3 WARD                                                                
         4 JONES                                                               
         5 MARTIN                                                              
         6 BLAKE                                                               
         7 CLARK                                                               
         8 SCOTT                                                               
         9 KING                                                                
        10 TURNER                                                              
        11 ADAMS            
        12 JAMES                                                               
        13 FORD        
        14 MILLER                                                              
已选择14行。
返回全部的行。但是下面的会让你诧异不已吧,怎么没有数据?
SQL> select rownum ,ename from emp where rownum  >5;
未选定行
SQL> select rownum ,ename from emp where rownum  =5;
未选定行
SQL> select rownum ,ename from emp where rownum  !=6;
    ROWNUM ENAME                                                               
---------- --------------------------------------------------                  
         1 SMITH                                                               
         2 ALLEN                                                               
         3 WARD                                                                
         4 JONES                                                               
         5 MARTIN  
SQL> select rownum ,ename from emp where rownum <=5;
    ROWNUM ENAME
---------- ----------
         1 SMITH
         2 ALLEN
         3 WARD
         4 JONES
         5 MARTIN
已选择5行。
解释一下: 在使用rownum <=5 时,会发生下面的操作:
1 oracle 查询,
2 oracle取得第一个符合条件的行,并将该行的rownum 设为1
3 有5行了吗? 若没有,则继续取值,步骤 4 ,如果有5行 就不再取值了。
4 oracle 取下一行,行号递增。下一行的rownum为2,直到rownum 为5
5 返回 第三步。
在分析rownum>5或=5的情况的情况。因为第一行数据的rownum永远为1 ,所以不可能>5或=5,所以就没有结果了。
SQL> select rownum ,ename from emp where rownum=1;
    ROWNUM ENAME                                                               
---------- --------------------------------------------------                  
         1 SMITH   --有结果 
二 rownum 前面不能加表的别名
SQL> select e.rownum ,ename from emp e where rownum <=5;
select e.rownum ,ename from emp e where rownum <=5
         *
第 1 行出现错误:
ORA-01747: user.table.column, table.column 或列说明无效

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22664653/viewspace-676620/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
MySQL DBA NoSQL DEVOPS

注册时间:2009-10-07

  • 博文量
    1026
  • 访问量
    8205955