Oracle伪列

在Oracle数据库之中为了实现完整的关系数据库的功能,专门为用户提供了许多的伪列.

这些数据伪列并不是用户在建立数据库对象时由用户完成的,而是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)的更多相关文章

  1. Oracle Schema Objects——Tables——Oracle Data Types

    Oracle Schema Objects Oracle Data Types 数据类型 Data Type Description NUMBER(P,S) Number value having a ...

  2. Oracle Schema Objects——Sequences(伪列:nextval,currval)

    Oracle Schema Objects 序列的作用 许多的数据库之中都会为用户提供一种自动增长列的操作,例如:在微软的Access数据库之中就提供了一种自动编号的增长列(ID列).在oracle数 ...

  3. Oracle 中的伪列

    昨天做了一个Oracle PL/SQL 相关的测试,其中有一道这样的题目:   下列那些是Oracle的伪列(ACD)  A.ROWID   B.ROW_NUMBER()  C.LEVEL  D.RO ...

  4. Oracle Schema Objects——Index

    索引主要的作用是查询优化. Oracle Schema Objects 查看执行计划的权限:查看执行计划plustrace:set autotrace trace exp stat(SP2-0618. ...

  5. Oracle Schema Objects——Tables——TableStorage

    Oracle Schema Objects Table Storage Oracle数据库如何保存表数据? Oracle Database uses a data segment in a table ...

  6. Oracle Schema Objects——View

    Oracle Schema Objects Oracle视图View 普通视图.物化视图 视图(视图不包含数据,不是段对象,不占用空间,只是一个代码.) 作用: 简化SQL 为安全,不暴露表的名称 视 ...

  7. Oracle Schema Objects(Schema Object Storage And Type)

    One characteristic of an RDBMS is the independence of physical data storage from logical data struct ...

  8. Oracle Schema Objects——Tables——TableType

    Oracle Schema Objects Object Tables object type An Oracle object type is a user-defined type with a ...

  9. 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 ...

随机推荐

  1. e585. Converting Between RGB and HSB Colors

    This example demonstrates how to convert between a color value in RGB (three integer values in the r ...

  2. ffplay(2.0.1)中的音视频同步

    最近在看ffmpeg相关的一些东西,以及一些播放器相关资料和代码. 然后对于ffmpeg-2.0.1版本下的ffplay进行了大概的代码阅读,其中这里把里面的音视频同步,按个人的理解,暂时在这里作个笔 ...

  3. Node.js进程通信模块child_process

    前言 Node.js是一种单线程的编程模型,对Node.js的赞美和诟病的也都是因为它的单线程模型,所有的任务都在一个线程中完成(I/O等例外).单线程模型,不仅让代码非常简洁,更是直接避免了线程调度 ...

  4. par函数col参数-控制颜色

    col参数用来控制颜色,其实有一些列的颜色相关的参数,都是以col 开头 col : 控制图片中点,文字以及绘图边框的颜色,代码示例: par(col = "red") plot( ...

  5. c++ template<typename T>

    template <typename T> 网上查了半天不知所云,网上说的太多,俺只是要知道所需要的就可以了. 写了个程序试了一下,其实就是这个东西可以根据你所需要的类型就行匹配.其实就是 ...

  6. angular ajax的使用及controller与service分层

    一个简单的例子,控制层:.controller('publishController',['$scope','publishService', function($scope,publishServi ...

  7. linux常用命令-tar,scp,du

    tar 打包排除指定目录 tar -zcvf afish.tar.gz * --exclude=file1 --exclude=dir1 排除目录注意: 1.--exclude=file1 而不是 - ...

  8. 世纪佳缘信息爬取存储到mysql,下载图片到本地,从数据库选取账号对其发送消息更新发信状态

    利用这种方法,可以把所有会员信息存储下来,多线程发信息,10秒钟就可以对几百个会员完成发信了. 首先是筛选信息后爬取账号信息, #-*-coding:utf-8-*- import requests, ...

  9. HDU 4497 GCD and LCM (分解质因数)

    链接 :  http://acm.hdu.edu.cn/showproblem.php?pid=4497 假设G不是L的约数 就不可能找到三个数. L的全部素因子一定包括G的全部素因子 而且次方数 ...

  10. ionic跳转(一)

    在ionic中可以用两个办法写中转链接(写模版地址或路由地址) 1)a 标签的 href <a class="button button-icon icon ion-android-h ...