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

Posted 条件

篇首语:知识的价值不在于占有,而在于使用。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ORACLE中ROWNUM用法总结!相关的知识,希望对你有一定的参考价值。

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

  ORACLE 中ROWNUM用法总结!

  对于 Oracle 的 rownum 问题 很多资料都说不支持> >= = beeen……and 只能用以上符号(< <= !=) 并非说用> >= = beeen……and 时会提示SQL语法错误 而是经常是查不出一条记录来 还会出现似乎是莫名其妙的结果来 其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇 同样是伪列 rownum 与 rowid 可有些不一样 下面以例子说明

  假设某个表 t (c ) 有 条记录

  如果用 select rownum c from t where rownum < 只要是用小于号 查出来的结果很容易地与一般理解在概念上能达成一致 应该不会有任何疑问的

  可如果用 select rownum c from t where rownum > (如果写下这样的查询语句 这时候在您的头脑中应该是想得到表中后面 条记录) 你就会发现 显示出来的结果要让您失望了 也许您还会怀疑是不谁删了一些记录 然后查看记录数 仍然是 条啊?那问题是出在哪呢?

  先好好理解 rownum 的意义吧 因为ROWNUM是对结果集加的一个伪列 即先查到结果集之后再加上去的一个列 (强调 先要有结果集) 简单的说 rownum 是对符合条件结果的序列号 它总是从 开始排起的 所以你选出的结果不可能没有 而有其他大于 的值 所以您没办法期望得到下面的结果集

   aaaaaaaa

   bbbbbbb

   ccccccc

  ……

  rownum > 没有记录 因为第一条不满足去掉的话 第二条的ROWNUM又成了 所以永远没有满足条件的记录 或者可以这样理解

  ROWNUM是一个序列 是oracle数据库从数据文件或缓冲区中读取数据的顺序 它取得第一条记录则rownum值为 第二条为 依次类推 如果你用> >= = beeen……and这些条件 因为从缓冲区或数据文件中得到的第一条记录的rownum为 则被删除 接着取下条 可是它的rownum还是 又被删除 依次类推 便没有了数据

  有了以上从不同方面建立起来的对 rownum 的概念 那我们可以来认识使用 rownum 的几种现像

   select rownum c from t where rownum != 为何是返回前 条数据呢?它与 select rownum c from tablename where rownum < 返回的结果集是一样的呢?

  因为是在查询到结果集后 显示完第 条记录后 之后的记录也都是 != 或者 >= 所以只显示前面 条记录 也可以这样理解 rownum 为 后的记录的 rownum为 因条件为 != 所以去掉 其后记录补上 rownum又是 也去掉 如果下去也就只会显示前面 条记录了

   为什么 rownum > 时查不到一条记录 而 rownum > 或 rownum >= 却总显示所以的记录

  因为 rownum 是在查询到的结果集后加上去的 它总是从 开始

   为什么 beeen and 或者 beeen and 能查到结果 而用 beeen and 却得不到结果

  原因同上一样 因为 rownum 总是从 开始

  从上可以看出 任何时候想把 rownum = 这条记录抛弃是不对的 它在结果集中是不可或缺的 少了rownum= 就像空中楼阁一般不能存在 所以你的 rownum 条件要包含到

  但如果就是想要用 rownum > 这种条件的话话就要用嵌套语句 把 rownum 先生成 然后对他进行查询

  select *

  from (selet rownum as rn t * from a where ……)

  where rn >

  一般代码中对结果集进行分页就是这么干的

  另外 rowid 与 rownum 虽都被称为伪列 但它们的存在方式是不一样的 rowid 可以说是物理存在的 表示记录在表空间中的唯一位置ID 在DB中唯一 只要记录没被搬动过 rowid是不变的 rowid 相对于表来说又像表中的一般列 所以以 rowid 为条件就不会有 rownum那些情况发生

cha138/Article/program/Oracle/201311/17536

相关参考

知识大全 Oracle应用——rownum

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

知识大全 oracle分页详解(rownum与orderby)

  Oracle的分页是通过rownum实现的  rownum是一个伪列是oracle系统自动为查询返回结果的每行分配的编号第一行为第二行为以此类推  一个oracle分页至少要包含三层(除非不用or

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

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

知识大全 在oracle中限制返回结果集的大小

  Oracle不支持类似于MySQL中的limit但你还是可以rownum来限制返回的结果集的行数    如果你只希望返回前十行纪录你可以这样写    SELECT*FROMtableWHERERO

知识大全 Oracle中使用的若干技术经典总结

Oracle中使用的若干技术经典总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  怎么样让我的

知识大全 Oracle中对时间操作的一些总结

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

知识大全 为数据库的表自动生成行号----为分页打好基础

  在以数据库为基础的应用程序开发中分页是一个比较常用的操作可惜的是SQLServer中没有Oracle中相应的ROWNUM属性可用用触发器生成一个ROWNUM列]勉强可以一用当然用如下的SQL语句也

知识大全 Oracle12c新特性再总结

Oracle12c新特性再总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文中作者将对c集

知识大全 Oracle中序列sequence用法

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

知识大全 oracle中substr函数的用法

  Inoracle/PLSQLthesubstrfunctionsallowsyoutoextractasubstringfromastring  Thesyntaxforthesubstrfunc