Oracle-伪劣rowid和rownumber的用法
-- 伪列 ROWID 物理地址
-- 使用ROWID可以快速的定位表中的某一行
-- ROWID值唯一 用来删除重复数据
-- 建表造数测试
-- rowid 的用法
select rowid,d.* from dept_test d;
-- 删除重复数据
select a.deptno,min(rowid) as rd from dept_test a group by a.deptno;
select a.deptno,max(rowid) as rd from dept_test a group by a.deptno;
delete from dept_test d
where rowid not in(select min(rowid) as rd
from dept_test a
group by a.deptno
);
commit;
-- 工作中的删除重复数据 不是所有的字段都是重复的
-- empno一样的就是重复数据 保留时间最大的一条
-- 分析函数
select e.*
,rank() over(partition by e.empno order by e.create_date desc) as rk
from emp_test e;
-- 取排序等于1的那条
select * from(
select e.*
,rank() over(partition by e.empno order by e.create_date desc) as rk
from emp_test e) a
where a.rk = 1;
delete from emp_test t
where (t.empno,t.create_date)
not in (
select a.empno,a.create_date from(
select e.*
,rank() over(partition by e.empno order by e.create_date desc) as rk
from emp_test e) a
where a.rk = 1
)
commit;
-- 伪列 ROWNUM 给查询的数据一个行号
-- 基本用法
select rownum as rn
,e.*
from emp e;
-- 工资排正序 查询结果集给一个行号
-- 首先我们得给工资排个序
-- 对排序后得结果集再给个序号
select rownum as rn,a.*
from (select * from emp order by sal) a;