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 ...
随机推荐
- new/delete 的使用要点
运算符 new 使用起来要比函数 malloc 简单得多,例如: int *p1 = (int *)malloc(sizeof(int) * length); int *p2 = new int[le ...
- (转)MPEG4码流简单分析
把MPEG4码流的分析和它的I,P,B Frame的判定方法在这里简要记录一下吧,供日后的翻看和大家的参考. 测试解码器测试了很久,由于需要将H264和MPEG4的码流进行分析和判断,并逐帧输入解 ...
- ScreenPointToRay - 近视口到屏幕的射线
正如题目所说,ScreenPointToRay可以计算从Camera的近视口nearClip向前发射一条射线到屏幕上的点的坐标. 函数原型为: public Ray ScreenPointToRay( ...
- 【Java面试题】44 java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
字节流,字符流.字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter.在java.io包中还有许多其他的流 ...
- c++ time_t
type struct tm <ctime> Time structure Structure containing a calendar date and time broken dow ...
- 哈希----字符串----time33
//此处只是获得了字符串的hash值,但是该如何散列到hash表中呢?哪个算法会好些?! 1 //在处理以字符串为键值的哈希时,times33哈希算法有着极快的计算效率和很好的哈希分布 //小写英文单 ...
- iotop详解
有时我们希望知道到底哪个进程产生了IO,这个时候就需要iotop这个工具了.它的输出和top命令类似,简单直观.官网:http://guichaz.free.fr/iotop/需要Python 2.5 ...
- 【Rmarkdown rmysql】
http://stackoverflow.com/questions/21167070/how-to-query-multiple-times-and-close-the-connection-at- ...
- linq在获取部门层级树种的应用
public string GetNavigationsJson() { AjaxA_NAVIGATIONS ajaxnavigations = new AjaxA_NAVIGATIONS(); IL ...
- mybatis由浅入深day01_8.2resultMap
8.2 resultMap mybatis中使用resultMap完成高级输出结果映射. resultType可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可 ...