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 ...
随机推荐
- mui.back()返回刷新功能
使用场景:操作某个步骤需要获取用户信息,如果用户未登陆,则跳转登录页面,登陆成功之后使用mui.back()返回父页面,父页面必须刷新. 子页面:登陆页 父页面:跳转登录页的页面 1. 在子页面初始化 ...
- 10046事件sql_trace跟踪
查看 sql 执行计划的方法有许多种, 10046 事件就是其中的一种. 与其他查看 sql 执行计划不同, 当我们遇到比较复杂的 sql 语句, 我们可以通过 10046 跟踪 sql 得到执行计划 ...
- 几个shell程序设计小知识(shell常识部分)
[转自]http://blog.chinaunix.net/uid-168249-id-2860686.html 引用:一.用户登陆进入系统后的系统环境变量: $HOME 使用者自己的目录 $PA ...
- tagVARIANT、VARIANT、_variant_t和COleVariant
tagVARIANT是一个结构体struct: C++ Code: tagVARIANT 123456789101112131415161718192021222324252627282930313 ...
- Linux alias 命令
alias命令用于查看或设置命令别名,但仅作用于该次登陆的会话,若要永久使用别名,可在 ~/.bashrc 中设定别名 [root@localhost ~]$ alias // 查看别名 [root@ ...
- Python 数据类型:元组
一.元组介绍 1. 元组可以存储一系列的值,使用括号来定义,每个元素之间用逗号隔开,形如 ('a', 'b', 'c', 'd')2. 元组一旦定义,元组内的元素就不能再修改,除非重新定义一个新的元组 ...
- apache与weblogic 的整合
web服务器与应用服务器的整合中,apache与weblogic 的整合算的上最普遍也是最基础的整合了 今天配置了一下: apache 2.0 weblogic 8.1 1.将weblogic中的mo ...
- IT教程视频
声明:以下视频均来自与互联网各个高级培训机构内部视频,我们能保证大部分的链接均可用.但不能保证所有的视频内容都是最新的.如果想要实时跟进各个培训机构的内部视频建议您关注微信公众号(BjieCoder) ...
- M0 M4之Timer初始化
新唐的定时器一般有很多功能:普通的定时功能,事件计数功能,捕获功能,超时触发ADC等等.大家如果感兴趣可以读一下<NANOB Timer功能介绍以及在弱灌注中的应用.pdf>,虽然各个系列 ...
- http协议详解-摘抄
引言 HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和 扩展.目前在WWW中使用的是HTTP/ ...