`
SwordShadow
  • 浏览: 270776 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Oracle 数据伪列ROWNUM、RUMID介绍与示例

阅读更多

数据伪列指的是用户不需要处理的列,而是由Oracle自行维护的数据列,在Oracle之中有两个数据伪列:ROWNUMRUMID

 

ROWNUM

       ROWNUM从单词含义上讲应该是行号,实际上ROWNUM为每一个显示的记录都会自动随着查询生成行号,例如,通过两个代码观察:

 

SELECT  ROWNUM ,empno, ename, job, hiredate, sal FROM emp;

        

 

此时的ROWNUM行号并不是永久固定的;

 

SELECT  ROWNUM ,empno, ename, job, hiredate, sal FROM emp WHERE deptno = 30;

 

 

        ROWNUM是每次动态重新生成的,即让有ROWNUM之后,下面就可以实现数据的部分显示

示例:查询前5条记录

 

SELECT ROWNUM,empno , ename ,job, hiredate, sal FROM emp WHERE ROWNUM<=5;

 

 

示例:查询610记录

按照正常思维肯定是直接进行BETWEEN…AND的判断;

SELECT ROWNUM empno, ename, job, hiredate ,sal FROM emp WHERE ROWNUM BETWEEN 6 AND 10;

 

这个时候并没有返回任何的数据,因为ROWNUM不是真实列,而要想真正的实现这种查询思路是:先查询前10条记录,之后再显示后5条记录,要依靠子查询完成

SELECT * FROM(
   SELECT ROWNUM rn,empno,ename,job,hiredate,sal FROM emp
   WHERE ROWNUM<=10) temp
WHERE temp.rn>5; //temp.rn>5表示显示5条后的数据

 

如果现在按照这个思路,下面就可以给出分页程序中所需要的功能实现

示例:显示前5条记录

        当前所在页(currentPage)为1

        每页显示的记录长度(lineSize)为5

第一页:

SELECT * FROM(
   SELECT ROWNUM rn, empno, ename, job, hiredate, sal FROM emp
   WHERE ROWNUM<=5) temp
WHERE temp.rn>0;

 

范例:显示中间的5条记录

当前所在页(currentPage)为2

       每页显示的记录长度(lineSize)为5

第二页:

SELECT * FROM(
   SELECT ROWNUM rn,empno,ename,job,hiredate,sal FROM emp
   WHERE ROWNUM<=10) temp
WHERE temp.rn>5;

 

示例:显示第三页的内容,currentPage=3,lineSize=10;

SELECT * FROM(
   SELECT ROWNUM rn, empno, ename, job, hiredate ,sal FROM emp
   WHERE ROWNUM<=15) temp
WHERE temp.rn>10;

  

 

ROWID

ROWID表示的是每一行数据保存的物理地址的编号。例如,观察如下的查询:

SELECT ROWID, deptno , dname, loc FROM dept;

 



  


每一条记录ROWID都不会重复,所以即便表中所有列的数据内容都重复了,ROWID也是不会重复的,而且以一个ROWID为例,说明ROWID组成,例如:

AAAR3qAAEAAAACHAAB

<!--[if !supportLists]-->·      

        示例:删除表中的重复记录

 现在项目之中由于管理不善,所以导致出现了许多重复记录

 先按照查询的方式做,首先找到所有重复的数据,重复的数据就比较容易,按照部门名称及位置分组,之后统计个数,如果告诉大于1,则表示重复

        数据插入的早,ROWID就小

        表示按照部门名称及位置分组,取出每一个最小的ROWID

        

select min(rowid) from dept group by dname, loc;

 

 

以上的数据是不删除的,所以下面编写DELETE语句:

DELETE FROM dept
WHERE ROWID NOT IN(
SELECT MIN(ROWID)
FROM dept
GROUP BY dname, loc
);
 
COMMIT;

 

在使用PL/SQL Developer更新手动修改数据时,添加ROWID查询则可以手动修改

SELECT t.*,ROWID FROM TABLE_NAME

另一种方式:

select ... from TABLE_NAME for update 

 则是悲观锁定,将表锁住,这种方式不推荐使用

  • 大小: 6 KB
2
0
分享到:
评论
1 楼 asiazhao 2013-12-02  
DELETE FROM dept a where exists(selecx 1 from dept b where b.name=a.name and b.loc=a.loc and b.rowid<a.rowid);
  
COMMIT;

相关推荐

    oracle数据库伪列简单介绍

    ### Oracle数据库伪列简析:rownum与rowid的区别 在Oracle数据库中,存在一种特殊的数据类型被称为“伪列”,这些伪列虽然看起来像是表中的列,但实际上它们并不存储任何数据,而是由数据库动态生成的。本文将重点...

    oracle的伪列与分页

    ### Oracle的伪列与分页 #### 一、Oracle伪列概述 在Oracle数据库中,伪列(Pseudocolumn)并非真正意义上的列,而是一种特殊的数据库对象,它看起来像表中的一个列,但实际上并不存储数据。Oracle提供了一些内置...

    Oracle中使用伪列rownum实现分页查询

    Oracle提供了一种特殊类型的列,称为伪列(Pseudo-Column),其中一个最著名的例子就是`ROWNUM`。`ROWNUM`伪列在查询执行时自动为每一行分配一个唯一的整数,从1开始递增。在分页查询中,我们可以巧妙地利用`ROWNUM`...

    17.Oracle伪列1

    总结,rowid和rownum是Oracle数据库中两个重要的伪列,它们分别用于标识数据的物理位置和控制查询结果的顺序。理解并熟练运用这两个伪列,对于优化查询性能和实现数据管理功能具有重要意义。在实际应用中,需要注意...

    对于 Oracle 的 rownum 问题

    =),并非说用&gt;,&gt;=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid ...

    oracle伪列以与伪表.doc

    1. `CURRVAL` 和 `NEXTVAL`:这两个伪列与Oracle序列有关。`CURRVAL`返回序列的当前值,而`NEXTVAL`则递增序列并返回新的值。它们通常用于生成唯一的标识符,如主键。 2. `LEVEL`:在查询层次结构数据时,`LEVEL`伪...

    oracle伪列以及伪表.doc

    4. ROWNUM:ROWNUM伪列在查询时生成,用于限制返回的结果集数量,它从1开始递增,但不保证连续,因为Oracle在处理查询时可能先返回满足条件的部分行。 二、Oracle伪表DUAL DUAL表是Oracle提供的一种特殊表,通常...

    oracle中利用关键字rownum查询前20名员工信息及rownum用法

    注意:对 rownum(伪列) 只能使用 &lt; 或 &lt;=, 而用 =, &gt;, &gt;= 都将不能返回任何数据  例:查询工资前20名的员工姓名,工资 ,工资由高到低 Select rownum,first_name,salary from (Select first_name, salary ...

    oracle rownum 学习

    这是因为ROWNUM是一个总是从1开始的伪列,Oracle认为`ROWNUM&gt;n`(n&gt;1的自然数)这种条件不成立。可以使用子查询方法来解决,例如: ```sql SELECT * FROM ( SELECT ROWNUM NO, ID, NAME FROM STUDENT ) WHERE NO &gt; 2;...

    伪列(pseudo column)ROWNUM介绍

    ### 伪列(pseudo column)ROWNUM介绍 #### ROWNUM伪列概述 在Oracle数据库中,`ROWNUM`是一个非常有用的伪列(也被称为虚拟列),它为每一行分配了一个唯一的行号。该行号从1开始递增,但请注意,`ROWNUM`并不是表...

    ROWNUM的使用技巧

    ROWNUM 是 Oracle 中的一种伪列,它可以根据返回记录生成一个序列化的数字。利用 ROWNUM,我们可以生产一些原先难以实现的结果输出,但是因为它是伪列的特殊性,在使用时需要注意一些事项,以免掉入“陷阱”。 特殊...

    ORACLE 中ROWNUM用法总结

    在Oracle数据库中,`ROWNUM`是一个非常有用的伪列,用于限制查询结果的行数,尤其是在处理大数据量或进行分页查询时。然而,`ROWNUM`的使用并不直观,尤其是当涉及到比较运算符(如`&gt;`, `&gt;=`, `=`等)时,容易引发...

    oracle rownum和distinct

    ROWNUM 是 Oracle 系统赋予查询返回的行的编号,它是从 1 开始的,这个伪字段可以用于限制查询返回的总行数。但是,ROWNUM 的真正含义往往被人误解。很多人认为 ROWNUM 是在查询结果集整个返回后再分配的顺序编号,...

    在oracle中灵活使用Rownum和rowId

    在Oracle数据库中,`ROWNUM` 和 `ROWID` 是两个非常重要的概念,它们可以帮助我们在查询数据时实现更灵活的数据管理。本文将详细介绍这两个概念的区别及其使用方法,并通过示例来帮助读者更好地理解。 #### 一、...

    oracle伪列以及伪表.docx

    Oracle数据库系统中,伪列和伪表是两个特殊的概念,它们为数据库操作提供了额外的功能和便利。本文将详细探讨这两个概念及其应用场景。 首先,我们来理解什么是伪列。伪列并非用户在创建表时定义的列,而是Oracle...

    关于oracle的rownum

    Oracle ROWNUM 伪列详解 Oracle 的 ROWNUM 伪列是一个非常重要的概念,它对结果集加的一个伪列,即先查到结果集之后再加上去的一个列。了解 ROWNUM 的意义是非常重要的,否则可能会出现莫名其妙的结果。 ROWNUM ...

    oracle rownum 的使用 和sqlserver有区别的!

    在数据库操作中,ROWNUM 是一个非常重要的伪列,主要用于返回查询结果的行序号。它在 Oracle 数据库中有着广泛的应用场景,尤其是在需要对查询结果进行分页显示、排序或者统计特定范围内的记录时尤为重要。本文将...

    oracle-rownum用法

    ROWNUM 是 Oracle 系统中一个伪列,用于对查询返回的行进行编号,从 1 开始,每行递增 1。ROWNUM 可以用于限制查询返回的总行数,但需要注意的是,ROWNUM 不能以任何表的名称作为前缀。 等于某值的查询条件 在使用...

    Oracle学习笔记(rownum和rowid)

    Oracle学习笔记(rownum和rowid),有具体的代码案例讲解rownum和rowid

    oracle中取中间记录的方法

    本文详细介绍了如何在Oracle数据库中使用`MINUS`操作符配合`ROWNUM`伪列来获取数据表中的中间记录。这种方法虽然简单有效,但在实际应用时还需要注意排序和性能等问题。对于需要频繁处理这类查询的场景,可以考虑...

Global site tag (gtag.js) - Google Analytics