连表查询之 rowid和rownum笔记

来源:互联网 发布:淘宝一件代发货源 编辑:程序博客网 时间:2024/06/03 19:17

一、rowid 和 rownum

ROWID是 ORACLE 中的一个重要的概念。用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即被确定且唯一。

ROWID 它是一个伪列,它并不实际存在于表中。它是 ORACLE 在读取表中数据行时,
根据每一行数据的物理地址信息编码而成的一个伪列。所以根据一行数据的 ROWID 能
找到一行数据的物理地址信息。从而快速地定位到数据行。数据库的大多数操作都是
通过 ROWID来完成的,而且使用 ROWID 来进行单记录定位速度是最快的。我们可以
将其用于删除重复数据。
ROWNUM 是一种伪列,它会根据返回记录生成一个序列化的数字。排序后的
结果集的顺序号 ,每一个结果集 都有自己顺序号 ,不能直接查询大于 1 的数。利用
ROWNUM,我们可以生产一些原先难以实现的结果输出。 例如实现分页操作。
ps: oracle 中 索引从 1 开始,java 程序 从 0 开始

1、rowid
实现重复记录的删除
– rowid 每条记录的唯一标识(记录的地址) -》 重复记录的删除
– 1、先归类
– 2、从每一堆当中任意选取一条 ,用来作为保留记录 rowid 来选取
– 3、删除|找出, 不在保留范围内的记录

2、rownum
rownum :1、必须排序 2、不能直接取大于 1 的数
– rownum 每个结果集的序列号, 都从1开始,根据结果动态生成的序号 -》 分页查询
– 1、排序, 获取排序后的rownum
– 2、将排序后的序列号作为一个结果集的字段(伪列)
– 3、在外层获取前 n条记录
– 4、再在外层使用 前n条记录的序号 取 m-n 条记录 大于m的哪些记录