一、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

    --注意:rownum和rowid只有Oracle有,其它数据库是不支持的 select * from scott.dept; --查询的结果称为'结果集' --rownum 伪列 '结果集'中产生的 ...

  2. oracle中 rownum与rowid的理

    一. Oracle分页查询 我们先看学习一下oracle分页查询的语法示例,然后在具体学习用rownum的原理. /*从第1条开始,每次选N个,从第1+M个开始每次选N个*/ /**/ select  ...

  3. oracle中 rownum和rowid的用法

    1.ROWNUM的使用--TOP-N分析 使用SELECT语句返回的结果集,若希望按特定条件查询前N条记录,可以使用伪列ROWNUM. ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的 ...

  4. rownum与rowId

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

  5. oracle rowid java_oracle数据库之rownum和rowid用法

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

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

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

  7. ROWNUM和ROWID的认识

    作者:杨裙 本次任务完成时间:2019年4月6日 开发工具与关键技术:Oracle sql*plus . PLSQL Developer 1. ROWNUM: ROWNUM它是ORACLE分页查询,R ...

  8. Oracle rownum、rowid 详解

    文章目录 1 概述 2 详解 2.1 rownum 2.2 rowid 3 扩展 3.1 Oracle 分页查询详解(rownum 实现) 3.2 Oracle 高效删除重复数据(rowid) 1 概 ...

  9. Oracle中查询rownum和rowid的区别

    在查询中,我们可以注意到,类似于"select xx from table where rownum < n"(n>1)这样的查询是有正确含义的,而"sele ...

最新文章

  1. 数组-在Shell脚本中的基本使用介绍
  2. 5GS 协议栈 — N1 接口的协议栈(NAS)
  3. 怎么让项目断开svn连接服务器,SVN断开与服务器连接
  4. redmine 配置
  5. 北斗导航 | 多模多频实时GNSS软件接收机
  6. 3.游戏优化(CCSpriteBatchNode)
  7. Python:常用模块简介(1)
  8. P3575-[POI2014]DOO-Around the world【环形dp】
  9. input 没显示 html,html - 为什么我的input type =“submit”没有显示?
  10. html页面锁屏,锁屏页面.html
  11. 云主机挂载硬盘 - 开机自动挂载 fdisk and parted
  12. C#自动切换Windows窗口程序,如何才能调出主窗口?
  13. 基于face_recognition构建的人脸识别系统以及相关应用
  14. kaggle数据集下载
  15. vdbench 参数详解
  16. 免费的身份证归属地查询接口
  17. 简单的html网页超链接
  18. 夺命故障!炸出了投资人!
  19. 概率论中的矩母函数(MGF)
  20. 在UE5中创建一个受战锤启发的角色

热门文章

  1. 在使用DelphiXE3和SQLite3进行程序开发时,解决最后一个字符乱码的问题
  2. 掌握计算机底层原理,可以让工作事半功倍吗?
  3. C#静态类,静态构造函数,静态变量
  4. 将一个对象相同的属性(不区分大小写)赋值给一个新对象 DataTable的一个简单的扩展...
  5. 019-Spring Boot 日志
  6. Juniper发展史
  7. React Redux: 从文档看源码 - Components篇
  8. 12.allegro环境设置[原创]
  9. cocos2d-x的CCSequence与CCRepeatForever的混用
  10. TODO C++ 异常处理