英语中冠词的用法总结 ORACLE中ROWNUM用法总结!
ORACLE中ROWNUM用法总结!
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那些情况发生
lishixinzhi/Article/program/Oracle/201311/17536