• Oracle 伪列


    ROWNUM

    ROWNUM:表示行号,实际上此是一个列,但是这个列是一个伪列,此列可以在每张表中出现。

    范例:在查询雇员表上,加入 ROWNUM

    SELECT ROWNUM,empno,ename,job,sal,hiredate FROM emp ;

    从运行上看,ROWNUM 本身采用自动编号的形式出现。

    假设只想显示前 5 条记录。条件中:ROWNUM<=5

    SELECT ROWNUM,empno,ename,job,sal,hiredate
    FROM emp WHERE ROWNUM<=5;

    如果现在要想进行中间的截取操作,则只能采用子查询,例如现在假设每页显示 5 条,第 2 页应该显示 6~10 条,那么对于数据库操作来讲,它在查询的时候应该首先查询出 1~10 条,之后再在查询的结果中取出后 5 条。

    SELECT *
    FROM (SELECT ROWNUM rn,empno,ename,job,sal,hiredate
        FROM emp WHERE ROWNUM<=10) temp
    WHERE temp.rn>5;

    ROWID

    ROWID:数据库中行的全局唯一地址,ROWID使用base64编码行的物理地址,编码字符包含 A-Z, a-z, 0-9, +, 和 /

    rowid由四部分组成:OOOOOOOFFFBBBBBBRRR:

    OOOOOO:数据对象编号(6位显示)FFF:相关数据文件编号(3位显示)BBBBBB:数据块编号(6位显示)RRR:数据块中行编号(3位显示)

     ROWID可用于删除数据表中重复数据

    select rowid, emp.* from emp;

    添加重复数据

    insert into emp select * from emp where empno=7369;

    新添加的数据其ROWID比之前的数据ROWID大,所以可以使用MIN函数选出非重复数据的ROWID

    select min(rowid) from emp group by empno, ename,job,mgr,hiredate,sal,comm,deptno

    删除重复数据

    delete from emp where rowid not in (
      select min(rowid) from emp group by empno, ename,job,mgr,hiredate,sal,comm,deptno
    );

    再查看全部数据,重复数据已删除

     

    • 经典的删除重复数据
    DELETE FROM EMP E 
    WHERE E.ROWID != (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMPNO = E.EMPNO);  

    •   ROWNUM主要用于服务器分页
    •   ROWID可用于删除重复数据




    没有高深的知识,没有进阶的技巧,万丈高楼平地起~!

  • 相关阅读:
    ubuntu升级显卡驱动
    __slots__属性,声明实力属性名字列表
    isinstance 与 type 的区别
    conda使用技巧
    卷积神经网络参数
    apache nginx php不显示版本号
    30个实用的Linux find命令示例
    账号的管理的那点事
    Linux 命令整理 —— 基本操作
    Linux 命令整理 —— 用户管理
  • 原文地址:https://www.cnblogs.com/aaron911/p/7774940.html
Copyright © 2020-2023  润新知