oracle伪列

转载 2013年12月04日 23:12:35

Oracle的伪列以及伪表

 

  oracle系统为了实现完整的关系数据库功能,系统专门提供了一组成为伪列(Pseudocolumn)的数据库列,这些列不是在建立对象时由我们完成的,而是在我们建立时由Oracle完成的。Oracle目前有以下伪列:

 

一、伪列:

 

 CURRVAL AND NEXTVAL 使用序列号的保留字

 

  LEVEL查询数据所对应的层级

 

 ROWID 记录的唯一标识

 

 ROWNUM 限制查询结果集的数量

 

 Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的。对每个表都有一个rowid的伪列,但是表中并不物理存储ROWID列的值。不过你可以像使用其它列那样使用它,但是不能删除改列,也不能对该列的值进行修改、插入。一旦一行数据插入数据库,则rowid在该行的生命周期内是唯一的,即即使该行产生行迁移,行的rowid也不会改变。

 

 ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。如果你用>,>=,=,between...and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum1,则被删除,接着取下条,可是它的rownum还是1,又被删除,依次类推,便没有了数据。

 

 

二、伪表

 

DUAL

 

该表主要目的是为了保证在使用SELECT语句中的语句的完整性而提供的。

 

一般用于验证函数。例如:

 

select sysdate,to_char(sysdate,'yyyy-mm-ddHH24:mm:ss') from dual

 

 

oracle的几个伪列函数

 

 

ORACLE有几个函数专门用来产生伪列的,rownum,rowid,row_number(),rank,dense_rank,lan

 

 

 1Connect by 语句

 

该语句结合伪列rownumlevel可以产生一个结果集.

 

1.   基本用法:

 

产生1~~100之间的整数

 

Select rownum xh from dual connect byrownum<=100;

 

Select level xh from dual connect bylevel<=100;

 

2.  高级用法

 

2.1.产生所有汉字,汉字内码为:19968~~~40869之间

 

 select t.* from(

   select rownum xh,nchr(rownum) hz from dual

   connect by rownum<65535

  ) t

 where t.xh between 19968 and 40869

 

 2rownum按行的顺序自动增加产生

 

row_number() 给每个组内的不同记录进行排号(分组可不设)

 

1.select t.c_group, 

2.      t.c_code, 

3.      t.c_desc, 

4.      <span style="color:#ff0000;">row_number</span>()over(PARTITION BY c_group ORDER BY c_desc DESC) rn 

5. from tp_dictionary t 

6. where t.c_group in ('PPSJ001','PPSJ002'); 

 

 

 

 3Rank() 按并列情况跨越排序

 

1.select t.c_group, 

2.      t.c_code, 

3.      t.c_desc, 

4.      <span style="color:#ff0000;">RANK</span>() over(ORDER BY c_code ) rn 

5. from tp_dictionary t 

6. where t.c_group in ('PPGL001','PPSJ002'); 

 

 

 

 4Dense_Rank() 按并列情况排序,不跳跃

 

1.select t.c_group, 

2.      t.c_code, 

3.      t.c_desc, 

4.      <span style="color:#ff0000;">Dense_RANK</span>()over( ORDER BY c_code ) rn 

5. from tp_dictionary t 

6. where t.c_group in ('PPGL001','PPSJ002'); 

 

 

 

 5Lag对列进行偏移(下面是偏移2)

 

1.select t.c_group, 

2.      t.c_code, 

3.      t.c_desc, 

4.      lag(c_code,2,null) over(PARTITION BY c_group ORDER 

5. BY c_desc asc) rn 

6. from tp_dictionary t 

7. where t.c_group in ('PPGL001','PPSJ002'); 

 

 

linux

本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2012-01/51112.htm

相关文章推荐

oracle的伪列与分页

  • 2011年11月12日 01:23
  • 1KB
  • 下载

oracle数据库伪列简单介绍

  • 2010年06月27日 07:35
  • 3KB
  • 下载

Oracle学习笔记(7)-----------数据更新、事务处理、数据伪列

一、数据的更新操作 DML操作语法之中,除了查询之外还有数据的库的更新操作,数据的更新操作主要指的是:增加、修改、删除数据,但是考虑到emp表以后还要继续使用,所以下面先将emp表复制一份,输入如下...

oracle 中的伪列和表

1、oracle的伪列 oracle系统为了实现完整的关系数据库功能,系统专门提供了一组称为伪列(Pseudocolumn)的数据库列,这些列不是在建立对象时由我们完成的,而是在我们建立时由...

oracle+伪列

在对表进行查询时,我们可以对oracle提供的一系列伪列(pseudocolumns)进行查询,这些伪列不存储在表中,oracle不允许对伪列进行dml操作。   在oracle10g和11g下,...

Oracle ORA_ROWSCN 伪列 说明

一. 官网对该伪列的说明 From:11gR2 http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/pseud...

Oracle 伪列 rownun

oracle的伪列rownum小结 2007-08-12 20:16 本人最近在使用oracle的rownum实现分页显示的时候,对rownum做了进一步的分析和研究。现归纳如下,希望能给...

Oracle中rownum伪列的学习和使用

今天学习Oracle的时候遇到了rownum,并没有完全搞清楚,然后将查询条件中的rownum  10,想查询出第十条记录之后的所有记录,结果什么都没查出来,一头雾水,后来百度了几个博客,终于搞明白了...

11-Oracle入门之rownum伪列--Top-N问题

背景找到员工表中工资最高的前三名,可以通过排序得到降序排列,但是要只显示前三名只使用子查询和各种组函数还不行,所以引入了rownum的概念,用于解决排序问题里面,要单独处理,排好序的一部分数据的问题。...
  • lzjsqn
  • lzjsqn
  • 2017年01月06日 21:10
  • 215

Oracle伪列rownum

Oracle伪列rownum Oracle基础知识:伪列rownum,伪列就像表中的列一样,但是在表中并不存储。伪列只能查询,不能进行增删改操作。 在查询的结果集中,ROWNUM为结果集中每一行标...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle伪列
举报原因:
原因补充:

(最多只允许输入30个字)