Oracle-数据伪列ROWNUM, ROWID
ROWNUM(行号) 根据每行数据进行的一个自动编号,这个编号是动态生成的,而不是固定的。查询条件改变时,生成的动态编号也不一样。 在Oracle中,ROWNUM可以做的事情: 1.取出第一行记录(其他的行记录不行) SELECT ROWNUM,empno,ename,job,sal FROM emp WHERE ROWNUM = 1; 2.取出前N行记录 SELECT * FROM emp WHERE ROWNUM <= 5; ? 想要取出前N行记录很简单,但是实际操作中往往需要取出第N-M行记录。 实例1:查询emp表的6-10行记录 SELECT * FROM ( SELECT empno,deptno,sal,comm,mgr,hiredate,rownum rn FROM emp WHERE rownum <=10) temp WHERE rn > 5; 思路:先查询前10行数据,经过查询后,生成的 rownum 列可以作为筛选条件继续查询 以上的查询过程可以看做是一个分页的结构,当前页 currenpage,每一页的数据行数为 linesize 如果要查询某一页的数据,则结构可以写成 SELECT * FROM (SELECT 列,...,rownum rn FROM 表名称 WHERE rownum <= page*linesize) WHERE rn > (page-1)*linesize; ? ROWID(行ID) AAAR3sAAEAAAACXAAA 对象编号:AAAR3s 保存文件编号:AAE 保存的块号:AAAACX 保存行号:AAA 范例1:查询ROWID SELECT ROWID,job FROM emp; 范例2:利用ROWID找到记录(任何情况下,都可以用ROWID找到唯一的一行记录) SELECT * FROM emp WHERE ROWID = ‘AAAR3sAAEAAAACXAAH‘; 实例2:将表中的重复数据删除,只保存一条 STEP-1:复制一个dept表为mydept; CREATE TABLE mydept AS SELECT * FROM dept; STEP-2:给mydept表增加一些重复数据 INSERT INTO mydept(deptno,dname,loc) VALUES (10,‘ACCOUNTING‘,‘NEW YORK‘); INSERT INTO mydept(deptno,loc) VALUES (30,‘SALES‘,‘CHICAGO‘); INSERT INTO mydept(deptno,‘CHICAGO‘); STEP-3:可以给数据分组,查询出同样的数据中最小的ROWID SELECT deptno,loc,min(rowid) FROM mydept GROUP BY deptno,loc; STEP-4:上面的查询结果就是无重复项的所有数据,即不用删除的数据,可以用NOT IN操作符进行筛选 DELETE FROM mydept WHERE rowid NOT IN (SELECT min(rowid) FROM mydept GROUP BY deptno,loc); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |