1. 程式人生 > >Oracle 偽列

Oracle 偽列

重復數據 delet 查看 select 全局 a-z 自動編號 tno 表示

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 );

再查看全部數據,重復數據已刪除

技術分享 


  •   ROWNUM主要用於服務器分頁
  •   ROWID可用於刪除重復數據

Oracle 偽列