zoukankan      html  css  js  c++  java
  • oracle分页sql(rownum伪列使用)

    首先看一下ROWNUM的定义:是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (先要有结果集)。简单的说 rownum 是对符合条件结果的序列号。它总是从1开始排起的。注意总是从1开始,先查出结果集,然后从1开始编号。

    举例来说,我有个user表,里面有字段user_id,按其排序,一共有60条记录,我要取出11到20这10条记录。

    看下sql:

    select *
       from (select rownum r, u.user_id, u.user_name
               from user u
              where rownum < 21
              order by u.user_id desc)
      where r > 10;
    

     首先,我们知道rownum对于 Oracle问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<、<=、!=),并非说用>,& gt;=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,或者异常结果。

     select *
       from user u
      where rownum > 10
      order by u.user_id desc
    

     直接使用rownum>10查询结果为空。因为第一条不满足去掉的话,第二条的ROWNUM又成了1,所以永远没有满足条件的记录。

    只能通过嵌套查询的方式先把rownum查出来,然后对它进行查询即可。

    最后一定切记rownum = 1 这条记录不可抛弃,它在结果集中是不可或缺的。

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

  • 相关阅读:
    Qt学习之路1---软件下载安装及工程简介
    c++之五谷杂粮---3
    c++之五谷杂粮---2
    隐式类型转换
    运算时的数据类型提升
    c++之五谷杂粮---1
    RSYNC--数据迁移、备份
    microsoft .netframework Available Source Code Components
    查看一个文件系统所在的卷组方法
    IE7/8浏览器都不能显示PNG格式图片
  • 原文地址:https://www.cnblogs.com/hexiweb/p/2516170.html
Copyright © 2011-2022 走看看