zoukankan      html  css  js  c++  java
  • oracle伪列

    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

  • 相关阅读:
    HDU
    2015 NCPC Problem G-Goblin Garden Guards
    二分答案
    多校 HDU-6312 Game (博弈)
    唯一分解定理
    欧拉函数
    发布系统遇到的问题解决
    ASP.Net数据导出Excel的几种方法
    项目管理计划书模版
    sql server2008附加数据库5120错误
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299536.html
Copyright © 2011-2022 走看看