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 伪列的更多相关文章

  1. oracle伪列

    Oracle的伪列以及伪表 oracle系统为了实现完整的关系数据库功能,系统专门提供了一组成为伪列(Pseudocolumn)的数据库列,这些列不是在建立对象时由我们完成的,而是在我们建立时由Ora ...

  2. Oracle伪列(ROWNUM)的使用

    先看一个题:查询emp表的信息,显示前5行数据,这时候我们就需要使用伪列(rownum)的概念. rownum在数据表并不是一个真实的列,其实每一行应该都有一个行号,这个伪列就是用来记录这个行号的,这 ...

  3. 关于Oracle伪列rownum

    rownum列跟rowid列不一样,虽然同为表的伪列.但是rowid列是列的一个固定属性,而rownum列是结果集的一个排序.所以像如下查询是不会返回结果的:select rowid,rownum,e ...

  4. Oracle伪列rownum

    Oracle基础知识:伪列rownum,伪列就像表中的列一样,但是在表中并不存储.伪列只能查询,不能进行增删改操作. 在查询的结果集中,ROWNUM为结果集中每一行标识一个行号,第一行返回1,第二行返 ...

  5. Oracle Schema Objects——伪列ROWID Pseudocolumn(ROWNUM、ROWID)

    Oracle Schema Objects Oracle Schema Objects——Tables——Oracle Data Types Oracle伪列 在Oracle数据库之中为了实现完整的关 ...

  6. oracle(sql)基础篇系列(三)——数据维护语句、数据定义语句、伪列

      DML语句 insert 向表中插入新的记录   --三种插入方式 --(1)不写字段的名字,直接按照字段的顺序把值逐个往里插 insert into dept2 values(50,'DANAM ...

  7. Oracle 中的伪列

    昨天做了一个Oracle PL/SQL 相关的测试,其中有一道这样的题目:   下列那些是Oracle的伪列(ACD)  A.ROWID   B.ROW_NUMBER()  C.LEVEL  D.RO ...

  8. Oracle分页查询=======之伪列的使用

    ========伪列========== 在Oracle数据库中,伪列不存在表中,但是可以从表中查询到 例如:SELECT ROWID 伪列,tname 教师姓名 FROM teacher; ==== ...

  9. oracle之rownum(伪列)

    整理和学习了一下网上高手关于rownum的帖子: 参考资料:  http://tech.ddvip.com/2008-10/122490439383296.html 和 http://tenn.jav ...

随机推荐

  1. EntityFramework增删改查

    http://www.cnblogs.com/libingql/archive/2013/01/29/2881988.html

  2. trait优先级 与 使用

    之前一直沒有讲到trait,在此我不得不提一下trait中的优先级: 在trait继承中,优先顺序依次是:来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法. For e ...

  3. Cocos2d-x 3.3Bate0 ExpandedListView

    之前写的ExpandedListView版本号因为版本号升级这里提供Cocos2d-x 3.3Bate0 版本号 代码下载:http://download.csdn.net/detail/qqmcy/ ...

  4. 怎么查看mac系统是32位还是64位的操作系统

    如何查看mac系统是32位还是64位的操作系统 (一)点击工具栏左上角点击 (苹果Logo)标志,关于本机  -->  更多信息 --> 系统报告  -->(左侧栏中)软件 (二) ...

  5. boost::archive::binary_iarchive

    #include <iostream> #include <string> #include <sstream> #include <vector> # ...

  6. 编写高质量代码–改善python程序的建议(二)

    原文发表在我的博客主页,转载请注明出处! 建议七:利用assert语句来发现问题断言(assert)在很多语言中都存在,它主要为调试程序服务,能够快速方便地检查程序的异常或者发现不恰当的输入等,可防止 ...

  7. 我的JavaScript笔记--数据类型,预编译,闭包

     在我们js中存储数据的空间可以分为两种,堆内存和栈内存 堆内存:我们定义的那些引用数据类型的数据都会在堆内存中开辟空间. 栈内存:我们运行的js代码还有我们定义的基本数据类型,都直接在栈内存中存储 ...

  8. 爬虫入门【10】Pyspider框架简介及安装说明

    Pyspider是python中的一个很流行的爬虫框架系统,它具有的特点如下: 1.可以在Python环境下写脚本 2.具有WebUI,脚本编辑器,并且有项目管理和任务监视器以及结果查看. 3.支持多 ...

  9. 表单验证 靠name获取

    表单 靠name获取 <form class="add-form" name="form" action="#" method=&qu ...

  10. mysql source 执行sql脚本,中文变量不显示问题或乱码问题

    执行脚本内容如下: SET @pre_version=2017080901; SET @cur_version=2017090401; SET @ver_desc = '测试脚本'; CALL pro ...