• Oracle中的rownum 和rowid的用法和区别


    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');
  • 相关阅读:
    把Chrome浏览器变成文本编辑器
    pigcms 标签读不出
    全排列函数
    线性基(二
    线性基(一
    fabs() abs()
    字面量声明的函数,后边最好加一个分号,否则的话,在控制台执行有问题的
    mongo集群
    linux的查找命令
    mysql 解决Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’错误
  • 原文地址:https://www.cnblogs.com/Rvin/p/9332424.html
Copyright © 2020-2023  润新知