暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 数据库:rowid 与 rownum

西安川石 2022-09-15
424


每天一个测试技术

只需几分钟

川石信息 带你学点更好的


川石信息|腾讯课堂

免费试学 | 性能测试





rowid


ROWID 是 ORACLE 中的一个重要的概念。用于定位数据库中一条记录的一个相对唯一地址值。通常情 况下,该值在该行数据插入到数据库表时即被确定且唯一。


ROWID 它是一个伪列,它并不实际存在于表 中。它是ORACLE 在读取表中数据行时,根据每一行数据的物理地址信息编码而成的一个伪列。所以根 据一行数据的ROWID 能找到一行数据的物理地址信息。从而快速地定位到数据行。数据库的大多数操作 都是通过ROWID 来完成的,而且使用ROWID 来进行单记录定位速度是最快的。我们可以将其用于删除 重复数据。


利用rowid删除表中重复数据


    -- 1、找出重复数据 :哪个学生 哪门课重复了
    select name,course,count(1) from tb_student group by name,course;
    select name,course,count(1) from tb_student group by name,course having count(1)>1;
    -- 2、删除重复数据 :删除重复记录
    -- 每条记录的唯一标识
    select s.* , rowid from tb_student s;
    -- 找出保留的rowid
    select min(rowid) from tb_student group by name,course;
    -- 删除
    delete from tb_student where rowid not in (select min(rowid) from tb_student
    group by name,course);

    左右拉动查看完整代码


    rownum


    ROWNUM 是一种伪列,它会根据返回记录生成一个序列化的数字。排序后的结果集的顺序号,每一个 结果集都有自己顺序号 ,不能直接查询大于 1 的数。利用ROWNUM,我们可以生产一些原先难以实现的结果输出。例如实现分页操作。


    rownum :1、必须排序 2、不能直接取大于 1 的数


    oracle 中 索引从 1 开始,java 程序 从 0 开始


      -- 最底层 rownum 数据库默认顺序号 -->没有用的
      select emp.*, rownum
      from emp;
      select emp.*, rownum from emp order by sal;
      -- 自己 排序后结果集的顺序号
      select e.*, rownum from (select * from emp order by sal desc) e;
      -- 取出工资前5名
      select e.*, rownum
      from (select * from emp order by sal desc) e
      where rownum <= 5;
      -- 取出 工资 3-5 名
      select e.*, rownum
      from (select * from emp order by sal desc) e
      where rownum <= 5
      and rownum >= 3;
      -- 三层模板 (分页)
      select e.*
      from (select e.*, rownum rn
      from (select * from emp order by sal desc) e
      where rownum <= 5) e
      where rn >= 3;
      /*
      select 字段列表 from (select e.*,rownum rn from (select from 表 order by 字段) e
      where rownum<= 最大值)
      where rn>=最小值
      */
      select e.*
      from (select e.*, rownum rn
      from (select * from emp order by sal desc) e
      where rownum <= 10) e
      where rn >= 6;

      左右拉动查看完整代码





      今天的内容就学习到这里了,每个工作日小编都会更新一个有关测试的小知识,希望大家多多关注我们,一起来学习喔!


      温馨提示:添加老师微信【13691729932】可以获取全套软件测试自学资料!


       往期回顾 

      Oracle 数据库简单查询语句的方法

      Oracle 数据库高级查询语句的方法


      扫码邀你加入

      软件测试群

      免费软件测试课

      川石课堂

      文章转载自西安川石,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论