在相同SQL语句执行时,rownum的值不变(第一次查询产生rownum值,之后保持不变)
查询工资最高的前三条员工信息。
select rownum ,ename,sal from (select *from emp order by sal desc) where rownum <=3;
先排序生成临时表,再对临时表查询生成rownum,选择前n个
TOP -n 通用做法:
select rownum,.... from (select *from xxx order by ...) where rownum <=n;
rowid: 物理伪列 18位
前六位: 数据对象编号
往后数三位: 数据文件编号
往后数六位: 数据块编号
往后数三位: 行号
rownum/rowid: 删除重复数据。
思路:
根据编号分组,将重复的数据放到一起,然后每组中只留一个数据(保留rowid最大或者最小)
筛选出要保留的数据 (select ... ,min(rowid)from emp group by ... );
删除不保留的
delete from emp where ... not in(要保留的数据);
</