rownum 的一点儿研究

简介:
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 或列说明无效 
相关文章
|
3月前
|
SQL
leetcode-SQL-1050. 合作过至少三次的演员和导演
leetcode-SQL-1050. 合作过至少三次的演员和导演
24 0
|
9月前
|
SQL 移动开发 Oracle
【SQL应知应会】分析函数的点点滴滴(三)
【SQL应知应会】分析函数的点点滴滴(三)
105 0
|
9月前
|
SQL 移动开发 Oracle
【SQL应知应会】分析函数的点点滴滴(一)
【SQL应知应会】分析函数的点点滴滴(一)
|
9月前
|
SQL 移动开发 Oracle
【SQL应知应会】分析函数的点点滴滴(二)
【SQL应知应会】分析函数的点点滴滴(三)
|
SQL 存储 NoSQL
招募队友,和老表一起21天学完SQL必知必会,肝
招募队友,和老表一起21天学完SQL必知必会,肝
招募队友,和老表一起21天学完SQL必知必会,肝
|
SQL 索引
朴实无华但实用的SQL大全,超乎你想象
朴实无华但实用的SQL大全,超乎你想象
94 0
朴实无华但实用的SQL大全,超乎你想象
|
SQL 机器学习/深度学习 自然语言处理
”想知道你家爱豆最近的演唱会?"让Text2SQL模型自动帮你回答!
”想知道你家爱豆最近的演唱会?"让Text2SQL模型自动帮你回答!
|
SQL 机器学习/深度学习 自然语言处理
万万没想到,BERT学会写SQL了
万万没想到,BERT学会写SQL了
万万没想到,BERT学会写SQL了
|
存储 自然语言处理 关系型数据库
从大厂不允许使用 SELECT * 说开去
从大厂不允许使用 SELECT * 说开去
121 0