oracle伪列ROWNUM的学习

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 19:46 点击:

oracle伪列ROWNUM的学习
1. ROWNUM是按照记录插入时的顺序排序的
 
2. ROWNUM并不实际存在,是对筛选后的结果集的一个排序,如果不存在结果集就不会有ROWNUM
 
3. ROWNUM不能用基表名作为前缀
 
4. 在使用ROWNUM进行查询时
 
4.1若使用大于号(>),则只能使用(>0),其他均不可以,用刚才的表做说明。
(a)查询rownum>0的数据
select rownum,xh,sex,birthday,classid,degree from stud
where rownum >0

和预期一样,显示了所有的记录
 
(b)查询rownum>1的数据
select rownum,xh,sex,birthday,classid,degree from stud
where rownum >1(>N,N>=1)

为什么不显示ROWNUM=(2,3,4)的记录
  说明:当select筛选出所要的结果集后,取出第一条ROWNUM=1,不符合ROWNUM>1,所以剔除,选取下面一条数据,ROWNUM仍然是1,还是不符合要求。以此类推,没有ROWNUM=1就没有ROWNUM=2,所以就不会筛选出ROWNUM>1的结果集。
 
(c)但是利用子查询就可以实现原来的想法
    select * from (select rownum as rn,xh,sex,birthday,classid,degree from stud)
where rn>1
注意:此处需要使用别名

 
4.2若使用小于号(<),同一般情况
 
4.3若使用等于号(=),则只能使用等于1(=1),原因同4.1
 
5. 对于ROWNUM排序的实验说明
   (a)执行四条插入语句,SQL如下:
   insert into stud values('A001','Jack','男','','10','');
   insert into stud values('A002','Tom','男','','30','');
   insert into stud values('A003','Jhon','女','','20','');
   insert into stud values('A004','Martin','男','','20','');
   commit;
   (b)再进行查看,SQL如下:
   select rownum,xh,sex,birthday,classid,degree from stud;
   结果如下:


     
   (c)查看后三条记录,SQL如下:
   select rownum,xh,sex,birthday,classid,degree from stud
   where xh in ('A002','A003','A004');
   结果如下:


    
ROWNUM是按照插入顺序得来的,但是上面第二次查询ROWNUM为什么不是2、3、4,或许有人会有这个疑问。由于ROWNUM并不是物理存在的,它是一个逻辑的顺序。当查询时,按条件得到’A002’、’A003’、’A004’三条记录,oracle对查询得到的三条记录按照插入时的次序进行排序分别为1、2、3。
 
6.利用ROWNUM取出第2-3行数据,有两种方法:
   方法一:先取出前3条记录,再取出第一条数据,用minus做差集就得到了需要的结果集
   SQL如下:
   select rownum,xh,xm,sex,classid from stud
   where rownum <=3
   minus
   select rownum,xh,xm,sex,classid from stud
   where rownum =1;
   结果如下:


     
   方法二:不利用minus也可以,利用子查询
   SQL如下:
   select * from (select rownum as rn,xh,xm,sex,classid from stud where rownum<=3)
   where rn>1;
   结果如下:


     

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • Table函数使用简介
      • Oracle数据库Constraint约束的常用操作及异常处理
      • Bulk Collect性能分析(zz)
      • export/import的使用
      • OCP043第十五讲 Database Security
      • ORACLE10gr2数据导入MySQL方案
      • oracle 让sys用户可以使用isqlplus
      • 在oracle数据库下使用iSQL*Plus DBA访问数据库
      • Oracle行列转换小结
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1