伪列ROWNUM、ROWID部分用法

时间:2022-01-15 20:38:50

ROWNUM是逻辑值,不可以参与计算

ROWID是物理值,可以参与计算

在ROWNUM和ROWID使用中,现将查找结果形成一个结果集 在结果集中给ROWID 和ROWNUM别名,在外层中使用这个别名找到要找的行。

 

ROWNUM用法

ROWNUM必须要给它起别名 不能直接用

查找emp表第五到第十行

SELECT EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO FROM(SELECT ROWNUM RN,EMP.* FROM EMP)WHERE RN>=5 AND RN<=10;

ROWID伪列

SELECT ROWID,E.* FROM EMP E;查看伪列

至于ROWID的作用,由于ROWID用来唯一标识表中数据的唯一性,所以可以利用这个特效去除重复

CREATE TABLE DEPT_8 AS SELECT * FROM DEPT WHERE 1=2;

INSERT INTO DEPT_8 SELECT * FROM DEPT;

INSERT INTO DEPT_8 SELECT * FROM DEPT;

COMMIT;

delete DEPT_8 where rowid not in (select max(rowid) from DEPT_8 group by DEPTNO,DNAME,LOC);

SELECT ROWID,DEPT_8.* FROM DEPT_8;

利用ROWNUM删去表中第3行

DELETE EMP2 WHERE EMPNO=

(

SELECT EMPNO FROM (SELECT ROWNUM RN,E.* FROM EMP2 E)WHERE RN=3

);

利用ROWNUM删去表中第5到7行

DELETE EMP4 WHERE EMPNO IN

(

SELECT EMPNO FROM(SELECT ROWNUM RN,E.* FROM EMP4 E)WHERE ROWNUM BETWEEN 5 AND 7

);

利用ROWNUM删去表中倒数第五行

DELETE EMP8 WHERE EMPNO=

(

SELECT EMPNO FROM(SELECT ROWNUM RN,EMP8.* FROM EMP8)WHERE RN=((SELECT COUNT(*)-4 FROM EMP8))

);

有很多重复的行,如何利用ROWNUM和ROWID删去倒数第五行

DELETE EMP10 WHERE ROWID=

(

SELECT RID FROM(SELECT ROWID RID,ROWNUM RN,E.* FROM EMP10 E)WHERE RN=(SELECT COUNT(*)-4 FROM EMP10)

);