oracle 之 伪列 rownum 和 rowid的用法与区别
rownum的用法
select rownum,empno,ename,job from emp where rownum<6
可以得到小于6的值数据
select rownum,empno,ename,job from emp where rownum>6 and rownum<10
得不到数据 原因:oracle 中首先会产生编号为1的数据,也就是不满足条件,那么后面的同样会继续产生第二条数据同时也是编号为1,所以最后得不到数据
解决方案:可以将select rownum,empno,ename,job from emp变成一个子查询
rowid的用法 可以去重复数据
同rownum伪列不同的是,他是物理存在,rowid是一种数据类型,基于64位编码的18个字符来唯一标志一条记录物理位置的一个id,rowid可以在表中进行查询,但是其值并未存储在表中,所以不支持增删改操作
例如:有两条一模一样的数据
delete from TableName where rowid not in (select min(rowid) from TableName group by 列名