rowid
ROWID 是 ORACLE 中的一个重要的概念。用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即被确定且唯一。
ROWID 它是一个伪列,它并不实际存在于表中。它是 ORACLE 在读取表中数据行时,根据每一行数据的物理地址信息编码而成的一个伪列。所以根 据一行数据的 ROWID 能找到一行数据的物理地址信息。从而快速地定位到数据行。数据库的大多数操作 都是通过 ROWID 来完成的,而且使用ROWID 来进行单记录定位速度是最快的。我们可以将其用于删除 重复数据。
利用rowid删除表中重复数据
-- 1、找出重复数据 :哪个学生 哪门课重复了
select name,course,count(1) from tb_student group by name,course;
select name,course,count(1) from tb_student group by name,course having count(1)>1;
-- 2、删除重复数据 :删除重复记录
-- 每条记录的唯一标识
select s.* , rowid from tb_student s;
-- 找出保留的rowid
select min(rowid) from tb_student group by name,course;
-- 删除
delete from tb_student where rowid not in (select min(rowid) from tb_student
group by name,course);
rownum
ROWNUM 是一种伪列,它会根据返回记录生成一个序列化的数字。排序后的结果集的顺序号,每一个结果集都有自己顺序号 ,不能直接查询大于 1 的数。利用 ROWNUM,我们可以生产一些原先难以实现的结果输出。例如实现分页操作。
rownum :1、必须排序 2、不能直接取大于 1 的数
oracle 中 索引从 1 开始,java 程序 从 0 开始
-- 最底层 rownum 数据库默认顺序号 -->没有用的
select emp.*, rownum
from emp;
select emp.*, rownum from emp order by sal;
-- 自己 排序后结果集的顺序号
select e.*, rownum from (select * from emp order by sal desc) e;
-- 取出工资前5名
select e.*, rownum
from (select * from emp order by sal desc) e
where rownum <= 5;
-- 取出 工资 3-5 名
select e.*, rownum
from (select * from emp order by sal desc) e
where rownum <= 5
and rownum >= 3;
-- 三层模板 (分页)
select e.*
from (select e.*, rownum rn
from (select * from emp order by sal desc) e
where rownum <= 5) e
where rn >= 3;
/*
select 字段列表 from (select e.*,rownum rn from (select from 表 order by 字段) e
where rownum<= 最大值)
where rn>=最小值
*/
select e.*
from (select e.*, rownum rn
from (select * from emp order by sal desc) e
where rownum <= 10) e
where rn >= 6;
总结
转载链接
希望大家伙不要像我一样被问得支支吾吾。。。