Oracle 伪列
ROWNUM
ROWNUM:表示行号,实际上此是一个列,但是这个列是一个伪列,此列可以在每张表中出现。
范例:在查询雇员表上,加入 ROWNUM
SELECT ROWNUM,empno,ename,job,sal,hiredate FROM emp ;

从运行上看,ROWNUM 本身采用自动编号的形式出现。
假设只想显示前 5 条记录。条件中:ROWNUM<=5
SELECT ROWNUM,empno,ename,job,sal,hiredate
FROM emp WHERE ROWNUM<=5;

如果现在要想进行中间的截取操作,则只能采用子查询,例如现在假设每页显示 5 条,第 2 页应该显示 6~10 条,那么对于数据库操作来讲,它在查询的时候应该首先查询出 1~10 条,之后再在查询的结果中取出后 5 条。
SELECT *
FROM (SELECT ROWNUM rn,empno,ename,job,sal,hiredate
FROM emp WHERE ROWNUM<=10) temp
WHERE temp.rn>5;

ROWID
ROWID:数据库中行的全局唯一地址,ROWID使用base64编码行的物理地址,编码字符包含 A-Z, a-z, 0-9, +, 和 /
rowid由四部分组成:OOOOOOOFFFBBBBBBRRR:
OOOOOO:数据对象编号(6位显示)FFF:相关数据文件编号(3位显示)BBBBBB:数据块编号(6位显示)RRR:数据块中行编号(3位显示)
ROWID可用于删除数据表中重复数据
select rowid, emp.* from emp;

添加重复数据
insert into emp select * from emp where empno=7369;

新添加的数据其ROWID比之前的数据ROWID大,所以可以使用MIN函数选出非重复数据的ROWID
select min(rowid) from emp group by empno, ename,job,mgr,hiredate,sal,comm,deptno

删除重复数据
delete from emp where rowid not in (
select min(rowid) from emp group by empno, ename,job,mgr,hiredate,sal,comm,deptno
);
再查看全部数据,重复数据已删除
- 经典的删除重复数据
DELETE FROM EMP E
WHERE E.ROWID != (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMPNO = E.EMPNO);
- ROWNUM主要用于服务器分页
- ROWID可用于删除重复数据
Oracle 伪列的更多相关文章
- oracle伪列
Oracle的伪列以及伪表 oracle系统为了实现完整的关系数据库功能,系统专门提供了一组成为伪列(Pseudocolumn)的数据库列,这些列不是在建立对象时由我们完成的,而是在我们建立时由Ora ...
- Oracle伪列(ROWNUM)的使用
先看一个题:查询emp表的信息,显示前5行数据,这时候我们就需要使用伪列(rownum)的概念. rownum在数据表并不是一个真实的列,其实每一行应该都有一个行号,这个伪列就是用来记录这个行号的,这 ...
- 关于Oracle伪列rownum
rownum列跟rowid列不一样,虽然同为表的伪列.但是rowid列是列的一个固定属性,而rownum列是结果集的一个排序.所以像如下查询是不会返回结果的:select rowid,rownum,e ...
- Oracle伪列rownum
Oracle基础知识:伪列rownum,伪列就像表中的列一样,但是在表中并不存储.伪列只能查询,不能进行增删改操作. 在查询的结果集中,ROWNUM为结果集中每一行标识一个行号,第一行返回1,第二行返 ...
- Oracle Schema Objects——伪列ROWID Pseudocolumn(ROWNUM、ROWID)
Oracle Schema Objects Oracle Schema Objects——Tables——Oracle Data Types Oracle伪列 在Oracle数据库之中为了实现完整的关 ...
- oracle(sql)基础篇系列(三)——数据维护语句、数据定义语句、伪列
DML语句 insert 向表中插入新的记录 --三种插入方式 --(1)不写字段的名字,直接按照字段的顺序把值逐个往里插 insert into dept2 values(50,'DANAM ...
- Oracle 中的伪列
昨天做了一个Oracle PL/SQL 相关的测试,其中有一道这样的题目: 下列那些是Oracle的伪列(ACD) A.ROWID B.ROW_NUMBER() C.LEVEL D.RO ...
- Oracle分页查询=======之伪列的使用
========伪列========== 在Oracle数据库中,伪列不存在表中,但是可以从表中查询到 例如:SELECT ROWID 伪列,tname 教师姓名 FROM teacher; ==== ...
- oracle之rownum(伪列)
整理和学习了一下网上高手关于rownum的帖子: 参考资料: http://tech.ddvip.com/2008-10/122490439383296.html 和 http://tenn.jav ...
随机推荐
- Laravel5.1 搭建博客 --后台登录
今天咱来实现后台的登录. 首先我们的后台需要三个控制器: PostController:管理文章. TagController:管理文章标签. UploadController:上传文件. 当我们访问 ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)4.4——自定义代码集合
问题: 你想要在项目中使用非标准的代码目录. 解决方案: 在gradle的build配置里面使用sourceSets属性. 讨论: Android分发的samples里面使用多个代码目录,使得通用的文 ...
- Http服务器实现文件上传与下载(三)
一.引言 在前2章的内容基本上已经讲解了整个的大致流程.在设计Http服务器时,我设计为四层的结构,最底层是网络传输层,就是socket编程.接着一层是请求和响应层,叫做Request和Respons ...
- mongodb在32位机的连接
Windows 32bit版本安装Mongodb时,会发生的下面问题 2016-05-09T00:09:45.124+0800 I STORAGE [initandlisten] exception ...
- c++ 流继承关系
- Kotlin——中级篇(二): 属性与字段详解
在前面的章节中,详细的为大家讲解到了Kotlin中对类的类的定义.使用.初始化.初始化.类继承等内容,但是在一个类中,几乎上是不可能不出现属性与字段(field)的,这一篇文章就为大家奉上Kotlin ...
- Guava教程
http://ifeve.com/google-guava/ github地址:https://github.com/google/guava
- mysql线上操作常用命令
备份命令: mysqldump -uroot -p --default-character-set=utf8 --hex-blob -R --log-error=/var/log/backup-log ...
- ORA-08002: sequence TESTTABLE1_ID_SEQ.CURRVAL is not yet defined in this session (未完全解决)
说明: 断开连接后 重新连接执行序列号当前值查找 会报错. 解决方法一:先查询序列号下一个值 SELECT testTable1_ID_SEQ.nextval from dual;
- 12.php中无比坑爹的构造函数。
当你在php类中,写一个构造方法时,记得,一定要用__这是两个下划线,而不是一个.......... <?php class Car { // function _construct() { / ...