当前位置:七道奇文章资讯数据防范Oracle防范
日期:2011-01-25 22:55:00  来源:本站整理

<b>Oracle查询rownum与rowid的差别之处</b>[Oracle防范]

赞助商链接



  本文“<b>Oracle查询rownum与rowid的差别之处</b>[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

以下的文章主如果介绍Oracle查询rownum与rowid的差别之处,以及以假定的方法即,查询条件为rownum = 2,在查询出第一条记录的时的具体内容的介绍,以下就是文章的具体内容的介绍.

在查询中,我们可以注意到,近似于

  1. select xx from table where rownum < n”(n>1) 

这样的查询是有精确含义的,而

  1. select xx from table where rownum = n” 

这样的查询只在n=1的时刻成立,

  1. select xx from table where rownum > n”(n>1) 

这样的查询只能得到一个空集.

别的

  1. select xx from table where rownum > 0” 

这个查询会返回全部的记录.这是为什么呢?缘由就在于Oracle对rownum的处理上,rownum是在得到后果集的时刻产生的,用于标志后果集合后果次序的一个字段,这个字段被称为“伪数列”,也就是事实上不存在的一个数列.

它的特点是按次序标志,并且是逐次递加的,换句话说就是只有有rownum=1的记录,才大概有rownum=2的记录.

让我们回头来解析一下在where中利用rownum作为Oracle查询条件的情形.在rownum取=1,大概rownum <= n (n>1)的时刻,没有问题.那么为什么当条件为rownum = n大概rownum >= n时明显有数据却只能得到一个空集呢?假定我们的查询条件为rownum = 2,那么在查询出的第一条记录的时刻,Oracle标志此条记录rownum为1,后果发现和rownum=2的条件不符,于是后果集为空.

写到这里,我忽然有一个风趣的设法:假定有一条查询语句为select xx,yy from table where zz > 20 and rownum < 10,那么在履行的时刻,是先按照zz>20的条件查询出一个后果集,然后按照rownum取出前10条返回?还是在按照zz>20的条件先查询,然后有一个记录就标志一个rownum,到rownum<10的时刻就终止查询?我认为应当是后者,也就是在履行语句的时刻,不是做full scan,而是取够数据就终止查询.

要考证这个设法应当很简单,找一个数据量非常大的表举行Oracle查询便可以了.惋惜目前我没有这样的表.

我们可以看出,直接利用rownum是要遭到限制的.但是很简单碰到这样的需求“查出符合条件的第xx条到第xx条记录”,比方页面的分页处理.这个时刻若何构造出合适自己的后果集?嗯,墙边那位说全取出来手工挑选的哥们可以拉出去了.

当然这样做也是可以的,但是前提是整个数据集的数据条数不多的情形下.假定碰到上十万百条的数据,全部取出来的话,用户就不用干别的事情了.这个时刻用户应当怎么做呢?当然就是要用到我们介绍的rownum拉!rownum不是个“伪数列”么,好说,我们目前把它弄成一个实在的字段便可以了.

具体做法就是操纵子Oracle查询,在构建暂时表的时刻,把rownum也一同构造进去.比方

  1. select xx,yy from 
    (select xx,yy,rownum as xyz from table where zz 
    >20) 
    where xyz between 10 and 20” 

这样便可以了.

别的利用Oracle供应的后果集处理函数minus也可以做到,比方

  1. select xx,yy from table where zz > 20 and rownum 
    <20 minus select xx,yy from table where zz>20 and rownum <10” 

但是利用minus仿佛比利用子查询越发损耗资源.

和rownum类似,Oracle还供应了别的一个伪数列:rowid.不过rowid和rownum差别,普通说来每一行数据对应的rowid是固定并且唯一的,在这一行数据存入数据库的时刻就肯定了.可以操纵rowid来查询记录,并且通过rowidOracle查询记录是查询速度最快的查询办法.

(这个我没有试过,别的要记着一个长度在18位,并且没有太明显规律的字符串是一个很艰难的事情,所以我个人认为操纵rowid查询记录的实用性不是很大)rowid只有在表发生移动(比方表空间改变,数据导入/导出今后),才会发生改变.   以上是“<b>Oracle查询rownum与rowid的差别之处</b>[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .