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 ...
随机推荐
- jquery -- onchange
触发onchange 首先页面有一个input标签,并且已绑定onchange事件,如: 1 <input type="text" onchange="consol ...
- RelativeLayout用代码兑现布局
RelativeLayout用代码实现布局TextView txt1 = new TextView(this); RelativeLayout.LayoutParams params = n ...
- perl 内置操作符 $^O -判断操作系统环境
今天看bowtie2的源代码的时候,发现有这样一段用法: my $os_is_nix = $^O ne "MSWin32"; my $align_bin_s = $os_is_ni ...
- <OC>OC新特征array literals
类似于java5提供的autoboxing功能.以前的写法:NSNumber * number = [NSNumber numberWithInt:1];NSArray * array = [NSAr ...
- Javascript定义类(class)的最新方法
极简主义法 3.1 封装 这种方法不使用this和prototype,代码部署起来非常简单,这大概也是它被叫做"极简主义法"的原因. 首先,它也是用一个对象模拟"类&qu ...
- 在可部署到brew真机上的程序包构建完之后又要如何将该程序包发布到真机上呢
1.到brew官网上去申请含有classid的bid文件,以及.sig文件 2.根据申请到的bid文件重新生成mif文件. 3.将mif文件部署到brew真机上的mif文件夹下. 4.在真机上的bre ...
- motion移植
一. 支持ffmpeg功能(使能motion中的视频编码功能)支持视频采集 —> ffmpeg不支持 —host 1. mkdir _install 2. ./configure —pref ...
- 面向对象----构造方法、this 关键字、函数的参数传递、package语句/import语句
构造方法 构造器的定义.作用 构造方法的特征 它具有与类相同的名称:它不含返回值: 注意:在构造方法里不含返回值的概念是不同于“void”的,在定义构造方法时加了“void”,结果这个方法就不再被自动 ...
- java集合的中的集合关系实现或继承关系图
放在这儿一目了然.
- case when 的实战应用(分别取图片展示问题)
SELECT lg.product_id, lg.goods_id, lg.goods_no, lg.product_price, lg.product_stock, lg.limit_amount, ...