知识大全 Oracle查询rownum和rowid的区别

Posted 条件

篇首语:一等二靠三落空,一想二干三成功。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle查询rownum和rowid的区别相关的知识,希望对你有一定的参考价值。

Oracle查询rownum和rowid的区别  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在Oracle中 有一个很有趣的东西 那就是rownum 当你从某个表中查询数据的时候 返回的结果集中都会带有rownum这个字段 而且有时候也可以使用rownum进行一些条件查询

  在查询中 我们可以注意到 类似于 select xx from table where rownum < n (n> )这样的查询是有正确含义的 而 select xx from table where rownum = n 这样的查询只在n= 的时候成立 select xx from table where rownum > n (n> )这样的查询只能得到一个空集 另外 select xx from table where rownum > 这个查询会返回所有的记录 这是为什么呢?原因就在于Oracle对rownum的处理上 rownum是在得到结果集的时候产生的 用于标记结果集中结果顺序的一个字段 这个字段被称为 伪数列 也就是事实上不存在的一个数列 它的特点是按顺序标记 而且是逐次递加的 换句话说就是只有有rownum= 的记录 才可能有rownum= 的记录

  让我们回头来分析一下在where中使用rownum作为查询条件的情况 在rownum取= 或者rownum <= n (n> )的时候 没有问题 那么为什么当条件为rownum = n或者rownum >= n时明明有数据却只能得到一个空集呢?假设我们的查询条件为rownum = 那么在查询出的第一条记录的时候 oracle标记此条记录rownum为 结果发现和rownum= 的条件不符 于是结果集为空 写到这里 我忽然有一个有趣的想法 假如有一条查询语句为select xx yy from table where zz > and rownum < 那么在执行的时候 是先按照zz> 的条件查询出一个结果集 然后按照rownum取出前 条返回?还是在按照zz> 的条件先查询 然后有一个记录就标记一个rownum 到rownum< 的时候就停止查询?我觉得应该是后者 也就是在执行语句的时候 不是做full scan 而是取够数据就停止查询 要验证这个想法应该很简单 找一个数据量非常大的表进行查询就可以了 可惜目前我没有这样的表

  我们可以看出 直接使用rownum是要受到限制的 但是很容易遇到这样的需求 查出符合条件的第xx条到第xx条记录 比如页面的分页处理 这个时候如何构造出适合自己的结果集?嗯 墙边那位说全取出来手工挑选的哥们可以拉出去了 当然这样做也是可以的 但是前提是整个数据集的数据条数不多的情况下 假如遇到上十万百条的数据 全部取出来的话 用户就不用干别的事情了 这个时候用户应该怎么做呢?当然就是要用到我们介绍的rownum拉!rownum不是个 伪数列 么 好说 我们现在把它弄成一个实在的字段就可以了 具体做法就是利用子查询 在构建临时表的时候 把rownum也一起构造进去 比如 select xx yy from (select xx yy rownum as xyz from table where zz > ) where xyz beeen and 这样就可以了 另外使用oracle提供的结果集处理函数minus也可以做到 例如 select xx yy from table where zz > and rownum < minus select xx yy from table where zz> and rownum < 但是使用minus好像比使用子查询更加消耗资源

cha138/Article/program/Oracle/201311/18298

相关参考

知识大全 oracle中rownum对排序的影响及解决方法

  标准的rownum分页查询使用方法  select*     from(selectc*rownumrnfromcontentc) &n

知识大全 说说Oracle的rowid

说说Oracle的rowid  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Oracle中ro

知识大全 Oracle应用——rownum

Oracle应用——rownum  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于rownum

知识大全 ORACLE数据库中的ROWID

ORACLE数据库中的ROWID  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们可能对ora

知识大全 ORACLE中ROWNUM用法总结!

ORACLE中ROWNUM用法总结!  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ORACLE

知识大全 oracle笔记之简单查询、限定查询和排序

  别名  oracle别名如果别名包含空格特殊字符(如#$)或需区分大小写(Name)需要用双引号把别名引起来  selectenameName  sal*AnnualSalary  fromemp

知识大全 Oracle层次查询和with函数的使用示例

Oracle层次查询和with函数的使用示例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  开发

知识大全 解析Oracle查询和删除JOB的SQL

解析Oracle查询和删除JOB的SQL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本篇文章是对

知识大全 个人查询征信和银行查询征信的区别

个人查询征信和银行查询征信的区别是什么?区别一:身份证显示不同,出于安全性考虑,互联网端查询的个人信用报告中客户的证件号码只展示后4位数字,其余数字用星号屏蔽,征信分中心查询的个人信用报告中的客户证件

知识大全 查询Oracle正在执行和执行过的SQL语句

查询Oracle正在执行和执行过的SQL语句  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  正在