oracle查重和oracle分页

oracle查重和oracle分页

查重

rowid列

rowid是一个伪列,在每个数据库中的每个表都存在。但是我们在查询时,默认不返回这一列。这一列的作用是用来区分数据表中的每一行数据,和主键 ID 有相同作用。但一般主键只能保证在当前表中不重复。

我们利用rowid永远不会重复这个特性对表中的数据查重。

案例:

使用 rowid 查重  

(同一个表,表1和表2是同一个表的别名)

select * from 表1 where exists(select * from 表2 
where 表1.name=表2.name
and 表1.password=表2.password
and 表1.rowid>表2.rowid);

使用主键 id 查重

select * from 表1 where exists(select * from 表2 
where 表1.name=表2.name
and 表1.password=表2.password
and 表1.id>表2.id);

删除查出的重复数据

delete from 表1 where exists(select * from 表2 
where 表1.name=表2.name
and 表1.password=表2.password
and 表1.rowid>表2.rowid);

分页

rownum伪列

rownum也是一个伪列。他与rowid不同的是,rowid在数据库中物理上是存在的,知识默认查询时不返回。而rownum则在物理上就不存在。

注意,rownum不能使用 rownum>?。rownum是从1开始查询的,先取值(第一次取到的值是1,即1>?),满足条件赋值,不满足则抛弃,所以将会永远1>?;将永远取不到值。

案例:

--先查询出下标小于10的数据
select 表.*,rownum from 表 where rownum<10;
--完整的语句 注意使用rownum别名
select * from (select 表.*,rownum r from 表 where rownum<10)where r>5;
posted @ 2019-05-07 15:18  白云之间  阅读(598)  评论(0编辑  收藏  举报