一、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. openoffice启动服务并将office文件转换为pdf文件

    1.首先下载最新版的openoffice工具,安装完成之后安装服务,, win+r打开命令提示符 输入cmd,cd C:\Program Files (x86)\OpenOffice 4\progra ...

  2. Windows Phone开发(18):变形金刚第九季

    变换不是一个好理解的概念,不是吓你,它涉及很多有关代数,几何,以及线性代数的知识.怎么?被我的话吓怕了?不用怕,尽管我们未必能够理解这些概念,只要我们知道怎么使用它们就是了.其实,变换就是平面上一种坐 ...

  3. Asp.NET误人子弟教程:在MVC里面结合JQ实现AJAX

    public class Person { public string Name { get; set; } public string City { get; set; } public strin ...

  4. 【codeforces 527B】Error Correct System

    [题目链接]:http://codeforces.com/contest/527/problem/B [题意] 给你两个字符串; 允许你交换一个字符串的两个字符一次: 问你这两个字符串最少会有多少个位 ...

  5. 络谷 P2865 [USACO06NOV]路障Roadblocks

    P2865 [USACO06NOV]路障Roadblocks 题目描述 Bessie has moved to a small farm and sometimes enjoys returning ...

  6. 查看TEMP 表空间usage

    SELECT S.sid || ','|| S.serial# sid_serial, S.username, S.osuser, P.spid, S.module, P.program, SUM ( ...

  7. [Tools] VS Code Tips

    Inside one file, you can freely mark the number 1-9: -] And jump to Number of bookmark: cmd + [-] It ...

  8. 改动虚拟机镜像的rootpassword

    有时从网上下载的虚拟机镜像.没有rootpassword,必须通过秘钥登录.然后秘钥又须要麻烦的注入到里面去.想用,却无法登录.非常头痛.本文提供一种通过改动虚拟机镜像里面的/etc/shadow文件 ...

  9. 创建hive整合hbase的表总结

    [Author]: kwu 创建hive整合hbase的表总结.例如以下两种方式: 1.创建hive表的同步创建hbase的表 CREATE TABLE stage.hbase_news_compan ...

  10. 使用powershell来设置时间

    https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/set-date?view=powers ...