Oracle Schema Objects——伪列ROWID Pseudocolumn(ROWNUM、ROWID)
Oracle伪列
在Oracle数据库之中为了实现完整的关系数据库的功能,专门为用户提供了许多的伪列.
- “NEXTVAL”和“CURRVAL”就是两个默认提供的操作伪列Oracle Schema Objects——Sequences(伪列:nextval,currval)
- SYSDATE与SYSTIMESTAMP也属于伪列SQL Fundamentals || Single-Row Functions || 日期函数date functions
- 查询使用的DUAL称为伪表
这些数据伪列并不是用户在建立数据库对象时由用户完成的,而是Oracle自动帮助用户建立的,用户只需要按照要求使用即可
两个重要的伪列:ROWNUM、ROWID
ROWID伪列
- 在数据表中每一行所保存的记录,实际上Oracle都会默认为每条记录分配一个唯一的地址编号,而这个地址编号就是通过ROWID进行表示的, ROWID本身是一个数据的伪列,所有的数据都利用ROWID进行数据定位。
- ROWID的存在:SELECT ROWID,deptno,dname,loc FROM dept ;
- ROWID组成:AAAR9VAAHAAAACFAAA
|
数据对象号(data object number) |
为AAAWec; |
|
相对文件号(relative file number) |
为AAG; |
|
数据块号(block number) |
为AAAAC2; |
|
数据行号(row number) |
为AAA; |
- 如果需要还原ROWID内容,可以利用如下函数:
- 拆分ROWID,取数据:
SELECT ROWID ,
DBMS_ROWID.rowid_object(ROWID) 数据对象号 ,
DBMS_ROWID.rowid_relative_fno(ROWID) 相对文件号 ,
DBMS_ROWID.rowid_block_number(ROWID) 数据块号 ,
DBMS_ROWID.rowid_row_number(ROWID) 数据行号,
deptno,dname,loc
FROM dept;
|
函数名称 |
描述 |
|
DBMS_ROWID.rowid_object(ROWID) |
从一个ROWID之中,取得数据对象号 |
|
DBMS_ROWID.rowid_relative_fno(ROWID) |
从一个ROWID之中,取得相对文件号 |
|
DBMS_ROWID.rowid_block_number(ROWID) |
从一个ROWID之中,取得数据块号 |
|
DBMS_ROWID.rowid_row_number(ROWID) |
从一个ROWID之中,取得数据行号 |
ROWNUM伪列(重要)
ROWNUM表示的是一个数据行编号的伪列,它的内容是在用户查询数据的时候,为用户动态分配的一个数字(行号),
ROWNUM的主要作用:生成行号.
ROWNUM不是固定和数据绑定在一起的。是在用户查询数据的时候,动态分配的.它是根据记录的累加进行的自动编号.
|
查询雇员编号、姓名、职位、基本工资、雇佣日期等信息并且显示每条记录的行号 |
|
SELECT ROWNUM,empno,ename,job,sal,hiredate FROM emp ; |
|
列出薪金高于公司平均薪金的所有员工编号、姓名、基本工资、职位、雇佣日期,所在部门名称、位置,公司的工资等级,但是为了信息浏览方便,要求在每一行数据显示前都增加一个行号。 |
|
SELECT ROWNUM rn,e.empno,e.ename,e.sal,e.job,e.hiredate,d.dname,d.loc,s.grade FROM emp e,dept d,salgrade s WHERE e.sal> ( SELECT AVG(sal) FROM emp) AND e.deptno=d.deptno AND e.sal BETWEEN s.losal AND s.hisal ; |
- ROWNUM作用
ROWNUM除了可以自动的进行行号的显示之外,也可以完成以下两个常用操作:
|
取出一个查询的第一行记录; |
SELECT * FROM emp WHERE ROWNUM=1; 只能查首行,不能查其他行. |
|
取出一个查询的前N行记录; |
SELECT * FROM emp WHERE ROWNUM<=5; 如果这个时候使用了范围,那么就不能取得值 SELECT * FROM emp WHERE ROWNUM BETWEEN 5 AND 10; |
- 数据的分页显示
分页操作组成:
|
数据显示部分 |
主要是从数据表之中选出指定的部分数据,需要ROWNUM伪列才可以完成; |
|
分页控制部分 |
留给用户的控制端,用户只需要选择指定的页数,那么应用程序就会根据用户的选择,列出指定的部分数据,相当于控制了格式中的currentPage; |
分页操作语法:
|
SELECT * FROM ( SELECT 列1 [,列2,...],ROWNUM rownum别名 FROM 表名称 [别名] WHERE ROWNUM <= (currentPage(当前所在页) * lineSize(每页显示记录行数)) ) temp WHERE temp.rownum别名>(currentPage(当前所在页) - 1) * lineSize(每页显示记录行数) ; |
使用ROWNUM进行前N行数据查询
|
显示雇员表中前5条记录 |
|
SELECT * FROM ( SELECT empno,ename,job,hiredate,sal,mgr,deptno,ROWNUM rn FROM emp WHERE ROWNUM<=5) temp WHERE temp.rn>0 ; |
|
显示雇员表中的6~10条记录 |
|
SELECT * FROM ( SELECT empno,ename,job,hiredate,sal,mgr,deptno,ROWNUM rn FROM emp WHERE ROWNUM<=10) temp WHERE temp.rn>5 ; |
Oracle 12C新特性 —— FETCH
在Oracle 12C之中为了方便数据的分页显示操作,专门提供了FETCH语句,使用此语句可以方便的取得指定范围内的操作数据。
- FETCH语句语法
|
SELECT [DISTINCT] 分组字段1 [AS] [列别名] , [分组字段2 [AS] [列别名] , …] FROM 表名称1 [表别名1] , 表名称2 [表别名2] …. [WHERE 条件(s)] [GROUP BY 分组字段1 , 分组字段2 , ….] [HAVING 过滤条件(s)] [ORDER BY 排序字段 ASC|DESC] [FETCH FIRST 行数] | [OFFSET 开始位置 ROWS FETCH NEXT 个数] | [FETCH NEXT 百分比 PERCENT] ROW ONLY |
- 此语句有三种使用方式:
|
取得前N行纪录: |
FETCH FIRST 行数 ROW ONLY; |
|
取得指定范围的纪录: |
OFFSET 开始位置 ROWS FETCH NEXT 个数 ROWS ONLY; |
|
按照百分比取得纪录: |
FETCH NEXT 百分比 PERCENT ROWS ONLY。 |
|
取得emp表中的前5行纪录 |
|
SELECT * FROM emp FETCH FIRST 5 ROW ONLY; |
|
为数据排序,取得前5行纪录 |
|
SELECT * FROM emp ORDER BY sal DESC FETCH FIRST 5 ROW ONLY; |
|
取得表中4~5条纪录 从第3行开始,取2条记录 |
|
SELECT * FROM emp ORDER BY sal DESC OFFSET 3 ROWS FETCH NEXT 2 ROWS ONLY ; |
|
按百分比取部分数据 |
|
SELECT * FROM emp ORDER BY sal DESC FETCH NEXT 10 PERCENT ROWS ONLY ; |
Oracle Schema Objects——伪列ROWID Pseudocolumn(ROWNUM、ROWID)的更多相关文章
- Oracle Schema Objects——Tables——Oracle Data Types
Oracle Schema Objects Oracle Data Types 数据类型 Data Type Description NUMBER(P,S) Number value having a ...
- Oracle Schema Objects——Sequences(伪列:nextval,currval)
Oracle Schema Objects 序列的作用 许多的数据库之中都会为用户提供一种自动增长列的操作,例如:在微软的Access数据库之中就提供了一种自动编号的增长列(ID列).在oracle数 ...
- Oracle 中的伪列
昨天做了一个Oracle PL/SQL 相关的测试,其中有一道这样的题目: 下列那些是Oracle的伪列(ACD) A.ROWID B.ROW_NUMBER() C.LEVEL D.RO ...
- Oracle Schema Objects——Index
索引主要的作用是查询优化. Oracle Schema Objects 查看执行计划的权限:查看执行计划plustrace:set autotrace trace exp stat(SP2-0618. ...
- Oracle Schema Objects——Tables——TableStorage
Oracle Schema Objects Table Storage Oracle数据库如何保存表数据? Oracle Database uses a data segment in a table ...
- Oracle Schema Objects——View
Oracle Schema Objects Oracle视图View 普通视图.物化视图 视图(视图不包含数据,不是段对象,不占用空间,只是一个代码.) 作用: 简化SQL 为安全,不暴露表的名称 视 ...
- Oracle Schema Objects(Schema Object Storage And Type)
One characteristic of an RDBMS is the independence of physical data storage from logical data struct ...
- Oracle Schema Objects——Tables——TableType
Oracle Schema Objects Object Tables object type An Oracle object type is a user-defined type with a ...
- Oracle Schema Objects——Tables——Overview of Tables
Oracle Schema Objects Overview of Tables A table is the basic unit of data organization in an Oracle ...
随机推荐
- Unity简介
Unity (也称 nity3D) 是一套包括图形. 声音.物理等功能的游戏引擎,提供了一个强大的关卡编辑器,支持大部分主流 3D 软件格式,使用 C# JavaScript 等高级语言实现脚本功能, ...
- wcf实体和ef实体冲突。。。
指定的架构无效.错误: CLR 类型到 EDM 类型的映射不明确,因为多个 CLR 类型与 EDM 类型“agentinfo”匹配.以前找到的是 CLR 类型“chanchengFlow.Models ...
- 解决error: Your local changes to the following files would be overwritten by merge
在项目里我们一般都会把自己第一次提交的配置文件忽略本地跟踪 1 [Sun@webserver2 demo]$ git update-index --assume-unchanged <filen ...
- 大型web系统数据缓存设计-l转载
原文地址:http://www.wmyouxi.com/a/60368.html#ixzz3tGYG9JwC 1. 前言 在高访问量的web系统中,缓存几乎是离不开的:但是一个适当.高效的缓存方案设计 ...
- 浅谈cookie测试
Cookie 提供了一种在Web 应用程序中存储用户特定信息的方法,例如存储用户的上次 访问时间等信息.假如不进行cookie存储一个网站的用户行为,那么可能会造成以下问题:用户进行购买几件商品转到结 ...
- 解决IE6双倍边距BUG
解决IE6双倍边距BUG,只要满足下面3个条件才会出现这个BUG: 1)要为块状元素; 2)要左侧浮动; 3)要有左外边距(margin-left); 解决这个BUG很容易,只需要在相应的块状元素的C ...
- oracle的常用函数 instr() 和substr()函数
from:http://1055592535.iteye.com/blog/1676235 在Oracle中 可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符. 在一个字符串中查找 ...
- 为KindEditor编辑器中的内容添加样式,使得自己定义前台页面显示效果与编辑器效果一致
KindEditor 本身自带有一定的样式,且为内部样式,在使用过程中,难免会发现部分效果不是我们想要的,因此.KindEditor提代了两种方式供使用着调用 1.内部样式.通过 cssData 属性 ...
- 实例教程Unity3D单例模式(二)自我包括法
unity3d 里的单例模式自我包括法 有一次玩Trench Run game,我意识到我的场景类里存在很多的GameObject.所以,我开发了自我包括的单例.假设没找找到实例,就会创建它自己的Ga ...
- mybatis由浅入深day02_3一对多查询
3 一对多查询 3.1 需求(查询订单及订单明细的信息) 查询订单及订单明细的信息. 3.2 sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. ...