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 ...
随机推荐
- 第二百九十二节,RabbitMQ多设备消息队列-Python开发
RabbitMQ多设备消息队列-Python开发 首先安装Python开发连接RabbitMQ的API,pika模块 pika模块为第三方模块 对于RabbitMQ来说,生产和消费不再针对内存里的一 ...
- 第二百八十二节,MySQL数据库-MySQL视图
MySQL数据库-MySQL视图 1.视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 2.也 ...
- VC内存溢出一例 –- 调用约定不一致
这个是网查的跟我在做图像分割realse相反的情况: 最近在写一个程序,调用了多个DLL,每个DLL代码都支持多线程,Debug的模式下基本调通了,但是在Release模式下,程序因为内存溢出而崩溃, ...
- apache -- xampp配置虚拟主机
<VirtualHost *:80> ServerName www.myblog.com DocumentRoot "F:/Code/myblog"<Direct ...
- Windows App开发之集成设置、帮助、搜索和共享
应用设置和应用帮助 "设置"合约 上一节中我们学习了怎样将应用设置保存到本地.这样的方式是通过在App内加入设置选项,这里另一种方式. 微软将其称为"设置"合约 ...
- CentOS tree命令详解
inux下tree命令详解---linux以树状图逐级列出目录的内容命令 ############################################################### ...
- php纯原生实现数组二分法
代码如下 $arr = [1,3,5,7,9];//$arr = range(1,10000);var_dump(find($arr, 2)); function find(array $arr, $ ...
- 如何在vs2008安装64位编译器
1.打开D:\Microsoft Visual Studio 9.0\Microsoft Visual Studio 2008 Professional Edition - CHS setup.exe ...
- 【Raspberry Pi】openwrt 路由
http://blog.sina.com.cn/s/blog_40983e5e0102v6qt.html
- The Rox Java NIO Tutorial
FQ之后访问 http://rox-xmlrpc.sourceforge.net/niotut/