Oracle 偽列
阿新 • • 發佈:2017-11-03
重復數據 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 ( selectmin(rowid) from emp group by empno, ename,job,mgr,hiredate,sal,comm,deptno );
再查看全部數據,重復數據已刪除
- ROWNUM主要用於服務器分頁
- ROWID可用於刪除重復數據
Oracle 偽列