ORACLE-ROWID、-ROWNUM

使用ROWID最高效删除重复记录方法:

  delete from emp e where e.rowid > (

    select min(x.rowid) from emp x where emp x where x.emp_no = e.emp_no;

  );

 

rowId的详细用法:

  ROWID 是一个类似于rownum的伪列,用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即
被确定且唯一。而对于聚簇表,由于聚簇特性,不同表上的记录由于存储在相同的簇上,因此会拥有相同的ROWID。数据库的大多数操作都是通
过ROWID来完成的,而且使用ROWID来进行单记录定位速度是最快的。

  摘自:http://blog.csdn.net/leshami/article/details/6931886

===========================================================================================

ROWNUM

  1, rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。

  2,子查询中的rownum必须要有别名,否则还是不会查出记录来,这是因为rownum不是某个表的列,如果不起别名的话,无法知道rownum是子查询的列还是主查询的列。

  3,针对上面这样的说法,本人有一个疑问:
  楼主说的是:“rownum来说它是oracle系统顺序分配为从查询返回的行的编号”,这里的“查询返回的行”是按什么条件查询出来的?我的理解是按照where中除了rownum以外的其他的条件查询出来的。

  流程应该是这样的:
    1.先按照where中除了rownum以外的其他的条件查询出结果并生成结果集
    2.给第一步生成的结果集加上rownum伪列
    3.按照rownum的条件进一步限制。如果一条记录不符合rownum的限制条件,则丢弃,而且下一条记录的rownum还是从1开始重新计数

  摘自:http://tenn.iteye.com/blog/99339

 

posted @ 2014-02-06 10:12  zl_说不得  阅读(277)  评论(0编辑  收藏  举报