【SQL】ROWNUM和ROWID
一、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相关推荐
- Oracle中的rownum和rowid
--注意:rownum和rowid只有Oracle有,其它数据库是不支持的 select * from scott.dept; --查询的结果称为'结果集' --rownum 伪列 '结果集'中产生的 ...
- oracle中 rownum与rowid的理
一. Oracle分页查询 我们先看学习一下oracle分页查询的语法示例,然后在具体学习用rownum的原理. /*从第1条开始,每次选N个,从第1+M个开始每次选N个*/ /**/ select ...
- oracle中 rownum和rowid的用法
1.ROWNUM的使用--TOP-N分析 使用SELECT语句返回的结果集,若希望按特定条件查询前N条记录,可以使用伪列ROWNUM. ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的 ...
- rownum与rowId
一.RowNum Rownum是oracle生成结果集时得到的一个伪列, 按照读出行的顺序, 第一条rownum=1, 第二条=2. 对于 Oracle 的 rownum 问题,很多资料都说不支持&g ...
- oracle rowid java_oracle数据库之rownum和rowid用法
Rownum和 Rowid是Oracle数据库所特有的,通过他们可以查询到指定行数范围内的数据记录. 以下通过例子讲解: --为了方便,首先,查找dept表中的所有. select deptno,dn ...
- sqlanyshere转mysql_【SQL】Oracle和Mysql的分页、重复数据查询(limit、rownum、rowid)
上周三面试题有两道涉及Oracle的分页查询,没有意外地凉了,现在总结一下. · Mysql mysql的分页可以直接使用关键字limit,句子写起来比较方便. 语法: ① limit m,n -- ...
- ROWNUM和ROWID的认识
作者:杨裙 本次任务完成时间:2019年4月6日 开发工具与关键技术:Oracle sql*plus . PLSQL Developer 1. ROWNUM: ROWNUM它是ORACLE分页查询,R ...
- Oracle rownum、rowid 详解
文章目录 1 概述 2 详解 2.1 rownum 2.2 rowid 3 扩展 3.1 Oracle 分页查询详解(rownum 实现) 3.2 Oracle 高效删除重复数据(rowid) 1 概 ...
- Oracle中查询rownum和rowid的区别
在查询中,我们可以注意到,类似于"select xx from table where rownum < n"(n>1)这样的查询是有正确含义的,而"sele ...
最新文章
- 数组-在Shell脚本中的基本使用介绍
- 5GS 协议栈 — N1 接口的协议栈(NAS)
- 怎么让项目断开svn连接服务器,SVN断开与服务器连接
- redmine 配置
- 北斗导航 | 多模多频实时GNSS软件接收机
- 3.游戏优化(CCSpriteBatchNode)
- Python:常用模块简介(1)
- P3575-[POI2014]DOO-Around the world【环形dp】
- input 没显示 html,html - 为什么我的input type =“submit”没有显示?
- html页面锁屏,锁屏页面.html
- 云主机挂载硬盘 - 开机自动挂载 fdisk and parted
- C#自动切换Windows窗口程序,如何才能调出主窗口?
- 基于face_recognition构建的人脸识别系统以及相关应用
- kaggle数据集下载
- vdbench 参数详解
- 免费的身份证归属地查询接口
- 简单的html网页超链接
- 夺命故障!炸出了投资人!
- 概率论中的矩母函数(MGF)
- 在UE5中创建一个受战锤启发的角色
热门文章
- 在使用DelphiXE3和SQLite3进行程序开发时,解决最后一个字符乱码的问题
- 掌握计算机底层原理,可以让工作事半功倍吗?
- C#静态类,静态构造函数,静态变量
- 将一个对象相同的属性(不区分大小写)赋值给一个新对象 DataTable的一个简单的扩展...
- 019-Spring Boot 日志
- Juniper发展史
- React Redux: 从文档看源码 - Components篇
- 12.allegro环境设置[原创]
- cocos2d-x的CCSequence与CCRepeatForever的混用
- TODO C++ 异常处理