一、ROWNUM

ROWNUM伪列是Oracle先查到结果集之后再加上去的一个伪列,这个伪列对符合条件的结果添加一个从1开始的序列号,并且序列号是从1开始增序排列的。

SQL> select rownum ,deptno,dname,loc from dept;

ROWNUM     DEPTNO DNAME          LOC

---------- ---------- -------------- -------------

1         10 ACCOUNTING     NEW YORK

2         20 RESEARCH       DALLAS

3         30 SALES          CHICAGO

4         40 OPERATIONS     BOSTON

在WHERE子句中使用ROWNUM可以起到过滤效果,这样我们可以很方便的取出结果集的任一位置的数据。

SQL> select rownum,deptno,dname,loc from dept where rownum<=3;

ROWNUM        DEPTNO DNAME          LOC

---------- ---------- -------------- -------------

1         10 ACCOUNTING     NEW YORK

2         20 RESEARCH       DALLAS

3         30 SALES          CHICAGO

二、ROWID

ROWID伪列是一种数据类型,它使用基于64位编码的18个字符来唯一标识一条记录的物理位置的一个ID(ROWID=6位数据对象编号+3位文件编号+6位块编号+3位行编号)。ROWID类似于主键,不同的是ROWNUM一般情况下是按照递增的顺序排列的。

SQL> select rowid,deptno,dname,loc from dept;

ROWID                  DEPTNO DNAME          LOC

------------------ ---------- -------------- -------------

AAAVRCAAEAAAACHAAA         10 ACCOUNTING     NEW YORK

AAAVRCAAEAAAACHAAB         20 RESEARCH       DALLAS

AAAVRCAAEAAAACHAAC         30 SALES          CHICAGO

AAAVRCAAEAAAACHAAD         40 OPERATIONS     BOSTON

ROWID的一重要作用是,查询和删除表中的重复记录。

(1)查询表中的重复记录

SQL> select * from emp_rowid where rowid not in

2  (select min(rowid) from emp_rowid group by empno);

EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO

---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------

7844 TURNER     SALESMAN        7698 1981-09-08 00:00:00       1500          0         30

(2)删除表中的重复记录

SQL> delete from emp_rowid where rowid not in (select min(rowid) from emp_rowid group by empno);

13 rows deleted.

三、ROWID和ROWNUM的区别

ROWID是物理存在的;而ROWNUM是动态的,先查到结果集后再加上去的一个列,因此必须先有结果集。

如果编写条件查询ROWNUM>5的记录,而查询结果集中没有多余5条记录,所以查询结果会是空。

SQL> select * from dept;

DEPTNO DNAME          LOC

---------- -------------- -------------

10 ACCOUNTING     NEW YORK

20 RESEARCH       DALLAS

30 SALES          CHICAGO

40 OPERATIONS     BOSTON

SQL> select * from dept where rownum>10;

no rows selected

【SQL】ROWNUM和ROWID的更多相关文章

  1. Oracle中rownum和rowid的理解(转)

    本文转自地址http://www.linuxidc.com/Linux/2012-04/58300.htm rownum,rowid都叫伪列. 但是,rownum是逻辑上的编号,且其值总是从1开始,每 ...

  2. oracle中rownum和rowid的区别

    rownum和rowid的区别总括: rownum和rowid都是伪列,但是两者的根本是不同的. rownum是根据sql查询出的结果给每行分配一个逻辑编号,所以你的sql不同也就会导致最终rownu ...

  3. rownum与rowId

      一.RowNum Rownum是oracle生成结果集时得到的一个伪列, 按照读出行的顺序, 第一条rownum=1, 第二条=2. 对于 Oracle 的 rownum 问题,很多资料都说不支持 ...

  4. Oracle中rownum和rowid的理解

    rownum,rowid都叫伪列. 但是,rownum是逻辑上的编号,且其值总是从1开始,每行的rounum不是固定的.而rowid是“物理”编号.若数据库文件没有移动,则每行的 rowid一般是固定 ...

  5. oracle中rownum和rowid的区别【转】

    rownum和rowid的区别总括: rownum和rowid都是伪列,但是两者的根本是不同的. rownum是根据sql查询出的结果给每行分配一个逻辑编号,所以你的sql不同也就会导致最终rownu ...

  6. Oracle Schema Objects——伪列ROWID Pseudocolumn(ROWNUM、ROWID)

    Oracle Schema Objects Oracle Schema Objects——Tables——Oracle Data Types Oracle伪列 在Oracle数据库之中为了实现完整的关 ...

  7. Oracle中的rownum 和rowid的用法和区别

    Oracle中的rownum 和rowid的用法和区别   1.rownum是伪列,是在获取查询结果集后再加上去的 (获取一条记录加一个rownum).对符合条件的结果添加一个从1开始的序列号. eg ...

  8. 伪列ROWNUM、ROWID部分用法

    ROWNUM是逻辑值,不可以参与计算 ROWID是物理值,可以参与计算 在ROWNUM和ROWID使用中,现将查找结果形成一个结果集 在结果集中给ROWID 和ROWNUM别名,在外层中使用这个别名找 ...

  9. oracle数据库之rownum和rowid用法

    Rownum 和 Rowid是Oracle数据库所特有的,通过他们可以查询到指定行数范围内的数据记录.   以下通过例子讲解: -- 为了方便,首先,查找dept表中的所有. select deptn ...

  10. 【SQL】Oracle和Mysql的分页、重复数据查询(limit、rownum、rowid)

    上周三面试题有两道涉及Oracle的分页查询,没有意外地凉了,现在总结一下. · Mysql mysql的分页可以直接使用关键字limit,句子写起来比较方便. 语法: ① limit m,n -- ...

随机推荐

  1. gitlab的添加密钥

    1.在本地电脑下载git的客户端并且安装 2.鼠标右键左面选中Git Bash Here 3.操作如下图生成密钥 4.将密钥复制过来添加到gitLab中 5.Eclipse配置密钥 6.在git创建的 ...

  2. 53. Maximum Subarray(动态规划)

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  3. fastclick:处理移动端click事件300毫秒延迟

    fastclick:处理移动端click事件300毫秒延迟 1.兼容性 iOS 3及更高版本的移动Safari iOS 5及更高版本的Chrome Android上的Chrome(ICS) Opera ...

  4. 造成segment fault,产生core dump的可能原因

    1.内存访问越界 a) 由于使用错误的下标,导致数组访问越界 b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符 c) 使用strcpy, strcat, spr ...

  5. 了解一下JAVA中的NIO模块

    网上资料大把,但要写写代码,我这个年纪的人才有一点点记忆了.. 参考URL: http://blog.csdn.net/wuxianglong/article/details/6612282 pack ...

  6. Spring MVC-集成(Integration)-生成PDF示例(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_pdf.htm 说明:示例基于Spring MVC 4.1.6. 以下示例显示如何 ...

  7. 2015 测试赛 大神和小伙伴 hihoCoder

    立方和公式和平方和公式.表示从来不记得这些公式... 每库礼物不同数量相同,总数=1+2+...+n=(n+1)*n/2 选取礼物的可能性的最大值为[(n+1)*n/2]^3 选取礼物价值重复两次的总 ...

  8. (二)模板引擎之Velocity脚本基本的语法全

    velocity velocity三种reference     变量:对java对象的一种字符串化表示,返回值调用了java的toString()方法的结果.     方法:调用的是对象的某个方法. ...

  9. UVa 263 - Number Chains

    题目:给你一个数字n0.将它的每一个位的数字按递增排序生成数a,按递减排序生成数b, 新的数字为n1 = a-b,下次依照相同方法计算n1,知道出现循环,问计算了多少次. 分析:数论.模拟.直接模拟计 ...

  10. 64位oracle数据库用32位plsql developer无法连接问题(无法载入oci.dll)

    在64位操作系统下安装oracle数据库,新下载了64位数据库(假设是32位数据库安装在64位的操作系统上,无论是client还是server端.都不要去选择C:\Program Files (x86 ...