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 ...
随机推荐
- VC++ 判断你的窗口是否置顶TopMost
大家可能已经知道,使你的窗口置顶(TopMost)或者总是最前(Always on Top)的方法: C++ Code 12345 // Make topmost , SWP_NOMOVE | ...
- Telnet发送邮件之聊以自慰
北京的冬天,闲着无聊,得做点什么暖暖脑袋,用windows系统自带工具telnet玩了把邮件发送 准备工作: 1.打开windows系统telnet客户端功能 2.准备两个邮箱帐号(xxx@163.c ...
- mysql通过拷贝文件实现数据快速迁移实例
最近在做监控DB的迁移,由于数据量非常大,采用直接拷贝从机数据目录的方式,操作过程有几个注意事项,记录下来,以备后用: 操作步骤: 1.停掉从机的SQL线程,并将 innodb_max_dirty_p ...
- 【BZOJ4550】小奇的博弈 博弈论
[BZOJ4550]小奇的博弈 Description 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色.最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色不同. 小 ...
- ORACLE数据库事务隔离级别
转自:https://www.cnblogs.com/jackal/archive/2011/02/14/1954231.html 事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度. ...
- [LintCode] 二叉树的后序遍历
The recursive solution is trivial and I omit it here. Iterative Solution using Stack (O(n) time and ...
- slenium截屏
创建全屏截屏: public static byte[] takeScreenshot(WebDriver driver) throws IOException { WebDriver augment ...
- 10分钟让你的站点也支持Markdown
Markdown简介 Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.Markdown 的语法十分简单,常用的标记符号也不超过十个,这种相对于 ...
- 巨蟒python全栈开发数据库前端1:HTML基础
1.HTML介绍 什么是前端? 前端就是我们打开浏览器的页面.,很多公司都有自己的浏览器的页面,这个阶段学习的就是浏览器界面 比如京东的界面:https://www.jd.com/ 引子 例1 soc ...
- 微信公众号 待发货-物流中-已收货 foreach break continue
w <?php $warr = array(1,2,3); $w_break = 0; foreach($warr AS $w){ if($w==2)break; $w_break += $w; ...