数据伪列指的是用户不需要处理的列,而是由Oracle自行维护的数据列,在Oracle之中有两个数据伪列:ROWNUM、RUMID
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;
示例:查询6~10记录
按照正常思维肯定是直接进行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
则是悲观锁定,将表锁住,这种方式不推荐使用
相关推荐
### Oracle数据库伪列简析:rownum与rowid的区别 在Oracle数据库中,存在一种特殊的数据类型被称为“伪列”,这些伪列虽然看起来像是表中的列,但实际上它们并不存储任何数据,而是由数据库动态生成的。本文将重点...
### Oracle的伪列与分页 #### 一、Oracle伪列概述 在Oracle数据库中,伪列(Pseudocolumn)并非真正意义上的列,而是一种特殊的数据库对象,它看起来像表中的一个列,但实际上并不存储数据。Oracle提供了一些内置...
Oracle提供了一种特殊类型的列,称为伪列(Pseudo-Column),其中一个最著名的例子就是`ROWNUM`。`ROWNUM`伪列在查询执行时自动为每一行分配一个唯一的整数,从1开始递增。在分页查询中,我们可以巧妙地利用`ROWNUM`...
总结,rowid和rownum是Oracle数据库中两个重要的伪列,它们分别用于标识数据的物理位置和控制查询结果的顺序。理解并熟练运用这两个伪列,对于优化查询性能和实现数据管理功能具有重要意义。在实际应用中,需要注意...
=),并非说用>,>=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid ...
1. `CURRVAL` 和 `NEXTVAL`:这两个伪列与Oracle序列有关。`CURRVAL`返回序列的当前值,而`NEXTVAL`则递增序列并返回新的值。它们通常用于生成唯一的标识符,如主键。 2. `LEVEL`:在查询层次结构数据时,`LEVEL`伪...
4. ROWNUM:ROWNUM伪列在查询时生成,用于限制返回的结果集数量,它从1开始递增,但不保证连续,因为Oracle在处理查询时可能先返回满足条件的部分行。 二、Oracle伪表DUAL DUAL表是Oracle提供的一种特殊表,通常...
注意:对 rownum(伪列) 只能使用 < 或 <=, 而用 =, >, >= 都将不能返回任何数据 例:查询工资前20名的员工姓名,工资 ,工资由高到低 Select rownum,first_name,salary from (Select first_name, salary ...
这是因为ROWNUM是一个总是从1开始的伪列,Oracle认为`ROWNUM>n`(n>1的自然数)这种条件不成立。可以使用子查询方法来解决,例如: ```sql SELECT * FROM ( SELECT ROWNUM NO, ID, NAME FROM STUDENT ) WHERE NO > 2;...
### 伪列(pseudo column)ROWNUM介绍 #### ROWNUM伪列概述 在Oracle数据库中,`ROWNUM`是一个非常有用的伪列(也被称为虚拟列),它为每一行分配了一个唯一的行号。该行号从1开始递增,但请注意,`ROWNUM`并不是表...
ROWNUM 是 Oracle 中的一种伪列,它可以根据返回记录生成一个序列化的数字。利用 ROWNUM,我们可以生产一些原先难以实现的结果输出,但是因为它是伪列的特殊性,在使用时需要注意一些事项,以免掉入“陷阱”。 特殊...
在Oracle数据库中,`ROWNUM`是一个非常有用的伪列,用于限制查询结果的行数,尤其是在处理大数据量或进行分页查询时。然而,`ROWNUM`的使用并不直观,尤其是当涉及到比较运算符(如`>`, `>=`, `=`等)时,容易引发...
ROWNUM 是 Oracle 系统赋予查询返回的行的编号,它是从 1 开始的,这个伪字段可以用于限制查询返回的总行数。但是,ROWNUM 的真正含义往往被人误解。很多人认为 ROWNUM 是在查询结果集整个返回后再分配的顺序编号,...
在Oracle数据库中,`ROWNUM` 和 `ROWID` 是两个非常重要的概念,它们可以帮助我们在查询数据时实现更灵活的数据管理。本文将详细介绍这两个概念的区别及其使用方法,并通过示例来帮助读者更好地理解。 #### 一、...
Oracle数据库系统中,伪列和伪表是两个特殊的概念,它们为数据库操作提供了额外的功能和便利。本文将详细探讨这两个概念及其应用场景。 首先,我们来理解什么是伪列。伪列并非用户在创建表时定义的列,而是Oracle...
Oracle ROWNUM 伪列详解 Oracle 的 ROWNUM 伪列是一个非常重要的概念,它对结果集加的一个伪列,即先查到结果集之后再加上去的一个列。了解 ROWNUM 的意义是非常重要的,否则可能会出现莫名其妙的结果。 ROWNUM ...
在数据库操作中,ROWNUM 是一个非常重要的伪列,主要用于返回查询结果的行序号。它在 Oracle 数据库中有着广泛的应用场景,尤其是在需要对查询结果进行分页显示、排序或者统计特定范围内的记录时尤为重要。本文将...
ROWNUM 是 Oracle 系统中一个伪列,用于对查询返回的行进行编号,从 1 开始,每行递增 1。ROWNUM 可以用于限制查询返回的总行数,但需要注意的是,ROWNUM 不能以任何表的名称作为前缀。 等于某值的查询条件 在使用...
通过巧妙地组合Oracle内置的伪列、函数和递归查询方法,我们可以高效地生成大量结构化的测试数据,这对于优化数据库性能、进行数据建模和测试有着重要的作用。掌握了这一技能,无论是对于日常的数据库管理工作还是...
本文详细介绍了如何在Oracle数据库中使用`MINUS`操作符配合`ROWNUM`伪列来获取数据表中的中间记录。这种方法虽然简单有效,但在实际应用时还需要注意排序和性能等问题。对于需要频繁处理这类查询的场景,可以考虑...