zoukankan      html  css  js  c++  java
  • ROWNUM用法

    今天发现一个查询条件,在数据库中可以查出来,在存储过程中则不显示。记录下来。方便以后自己找 错误的例子:Select rownum,c1 from t1 where rownum>10 查询结果:空的 解释: ROWNUM是对结果集加的一个伪列,即查询结果集之后再加上去的一个列(强调:先要有结果集)。 简单的说:rownum是对符合条件结果的序列号。它总是从1开始,所以你选出的结果不可能没有1,而有其他大于1的值。 Rownum>10没有记录的原因: 因为第一条不满足去掉的话, 第二条的ROWNUM又成了1,所以永远没有满足条件的记录。 ROWNUM是一个序列,是Oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条记录则为2,以此类推。如果你用>,>=,=,between…and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下条,可它的rownum还是1,又被删除。以此类推。便无数据显示。 Rowid和rownum区别 Rowid和rownum虽都是伪列,但存在方式不同。Rowid可以说是物理存在的,表示记录在表空间中的唯一位置ID,在DB中唯一。只要记录中没有没有被搬动过,rowid可以说是物理存在的。Rowid相对于表来说又像表中的一般列,所以以rowid为条件就不会有rownum哪些情况发生。 注意:rownum不能以任何基表的名称作为前缀 Rownum在某区间的数据,必须使用子查询。 Eg:要查询rownum在第二行和第三行之间的数据。包括第二和第三行数据, 可以通过子查询解决。 SQL>select * from (select rownum no,id,name from student where rownum<=3) where no>=2 Rownum和排序 Eg: 原SQL>select rownum,id,name from student order by name; 结果可以看出rownum并不是按照Name列来生成的序号。系统是按照记录插入时的顺序给记录排号的,rowid也是顺序分配的。 解决方法:子查询 SQL>Select rownum,id,name from (select * from student order by name); 注意:只能用以上符号(<、<=、!=) 更快的方法: Select * from (select rownum,a from yourtable where rownum<=20 order by name) where r>10
    写个博客不容易,请转载的时候备注下原文出处,谢谢
    作者:keepnode
    博客地址:http://www.cnblogs.com/woaic
    每件事到最后都是好事,如果不是好事,说明还没有到最后
    =========================
  • 相关阅读:
    Reactive Extensions (Rx) 入门(5) —— Rx的事件编程
    Reactive Extensions (Rx) 入门(4) —— Rx的事件编程
    Reactive Extensions (Rx) 入门(3) —— Rx的事件编程
    Reactive Extensions (Rx) 入门(2) —— 安装 Reactive Extensions
    Reactive Extensions (Rx) 入门(1) —— Reactive Extensions 概要
    Xamarin NuGet 缓存包导致 already added : Landroid/support/annotation/AnimRes 问题解决方案
    Android 系统Action大全
    Xamarin Forms 实现发送通知点击跳转
    如何理解灰度发布
    推荐一款分布式微服务框架 Surging
  • 原文地址:https://www.cnblogs.com/woaic/p/3943019.html
Copyright © 2011-2022 走看看