zoukankan      html  css  js  c++  java
  • Oracle中的rownum 和rowid的用法和区别

    1.rownum是伪列,是在获取查询结果集后再加上去的 (获取一条记录加一个rownum)。对符合条件的结果添加一个从1开始的序列号。

       eg:  

    select rownum,phone_no from ur_user_info where rownum < 6;

    attention:

      rownum是动态的,必有查询结果,然后再给查询的结果集添加上这个列。  例如:第一条记录的rownum是1 ,第二条是2,以此类推。 

    select rownum, phone_no from ur_user_info where rownum > 5 and rownum < 10;  ---查询结果为空集

    当产生结果集时,oracle会产生一条rownum为1的记录,显然不符合条件;那么就会产生第二条记录,同样rownum=1,也不符合记录;  一直下去,导致最后上述sql产生的结果集时空集。 

    如果需要查询到结果,需要使用子查询:

    -----错误写法:
    select
    rownum, phone_no from (select rownum rn , phone_no from ur_user_info ) a where a.rownum > 5 and a.rownum < 10;
    select rownum,*
      from (select rownum rn, a.* from ur_user_info a where rownum < 10) a
     where a.rn > 5;
    
    --注意: 1.rownum只能用< 或者<=             2. <或者<=今年放在子查询里面

    2.rowId伪列

    rowid是物理存在的,实际存在的一个列,是一种数据类型。 基于64为编码的18个字符来唯一标识的一条记录的物理位置的一个ID。   

    唯一标识出对应的存储的物理位置, 类似hashcode值。

    attention:rowid并未存储在表中,所以不支持增删改操作,只能用户查询。

     

    select row_id ,phone_no from ur_user_info where rowid > 5 and rowid < 10;

    实际应用场景:数据去重--当多条记录主键相同或者多条记录完全一致时,只需要留下一条记录。(账单表中出现多条一样的数据)

    delete from bal_acctbook_info
     where rowid not in (select min(rowid)
                           from bal_acctbook_info
                          where balance_id = '4012562452'
                            and op_time = '20171212111111');

    -----明天上线,给自己买了一份重大疾病保险,但愿一切平安。

  • 相关阅读:
    stl学习笔记—set/multimap
    2013 杭州站 hdoj4778 Gems Fight!
    矩阵加速数列递推
    暑假写的两个数据结构
    AC自动机模板 hdoj2222 UVA-11468
    树莓派安装3.5英寸触摸屏幕
    树莓派设置NTP同步
    在树莓派上设置无线静态IP
    运行tomcat7w.exe未安装指定的服务
    LoadRunner 11安装Micosoft Visual C++ 2005 SP1时提示命令行选项语法错误
  • 原文地址:https://www.cnblogs.com/whut-helin/p/8024860.html
Copyright © 2011-2022 走看看