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. php 输出带变量字符串(echo 函数的应用)

    转自:  http://www.cnblogs.com/devcjq/articles/2306150.html 学习PHP从最简单的开始:echo, print<?php$temp = arr ...

  2. 快速找出System.Management.Automation.dll,c#调用powershell

    public static void InvokeSystemPS(string cmd) { List<string> ps = new List<string>(); ps ...

  3. 几个shell程序设计小知识(shell常识部分)

    [转自]http://blog.chinaunix.net/uid-168249-id-2860686.html 引用:一.用户登陆进入系统后的系统环境变量:  $HOME 使用者自己的目录  $PA ...

  4. 【python】\\u的字符编码问题

    Str = "\\u559c\\u6b22\\u4e00\\u4e2a\\u4eba";Str = Str.decode("unicode-escape")

  5. 编写Unity3D着色器的三种方式

    不管你会不会写Unity3D的shader,估计你会知道,Unity3D编写shader有三种方式,这篇东西主要就是说一下这三种东西有什么区别,和大概是怎样用的. 先来列一下这三种方式: fixed ...

  6. 怎样批量修改MathType公式格式

    MathType是一款数学公式编辑器,我们在写论文的时候常常会遇到,但是有时由于公式的样式.大小和间隔等不符合论文要求,这个时候我们如果一个个修改是很麻烦的,还容易出错.所以批量修改就非常的有必要了, ...

  7. 搭建基于 HDFS 碎片文件存储服务

    安装 JDK HDFS 依赖 Java 环境,这里我们使用 yum 安装 JDK 8,在终端中键入如下命令: yum -y install java-1.8.0-openjdk* 使用如下命令查看下 ...

  8. 搭建LNMP+CI环境

    首先搭建 LNMP 的服务器环境 安装 Nginx, MySQL 和 PHP 软件包,执行以下命令 yum install -y nginx mariadb-server mariadb php ph ...

  9. 详解JavaScript的splice()方法

    from:http://www.jquerycn.cn/a_10447 在javascript中splice()方法,是一个很强的数组方法,它有多种用法.splice()主要用途是向数组的中部插入项. ...

  10. ubuntu下vim配置(刷题和比赛两套)

    1. 平时刷题练习使用 "mswin.vim 插件提供windows下的编辑快捷键功能 source $VIMRUNTIME/mswin.vim behave mswin set nu se ...