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