zoukankan      html  css  js  c++  java
  • Oracle 分页 ROWNUM 两种分页方法和ROWID用法

    原因一 oracle默认为每个表生成rowmun,rowid字段,这些字段我们称之为伪列

    测试表

     1 CREATE TABLE A 
     2 (
     3 AID NUMBER(20) primary key,
     4 ANAME VARCHAR2(200)
     5 )
     6 
     7  
     8 
     9 insert into A values(1,'甲骨文'); 
    10 insert into A values(2,'微软');
    11 insert into A values(6,'ioe');
    12 insert into A values(7,'iBe');
    13 insert into A values(5,'iAe');
    14 
    15 insert into A values(8,'甲骨文1'); 
    16 
    17 insert into A values(9,'微软3');
    18 insert into A values(10,'ioe4');
    19 insert into A values(11,'iBe5');
    20 insert into A values(12,'iA11');
    简单的分页  例:SELECT ROWNUM  ,a.FROM A a;

    既然提到了 ROWNUM 就提下ROWID把
    
    例子:SELECT rowid,rownum,AID,ANAME FROM A;

    oracle数据库的表中的每一行数据都有一个唯一的标识符,或者称为rowid,在oracle内部通常就是使用它来访问数据的。rowid需要 10个字节的存储空间,并用18个字符来显示。该值表明了该行在oracle数据库中的物理具体位置。可以在一个查询中使用rowid来表明查询结果中包含该值。
    
     
    
     保存rowid需要10个字节或者是80个位二进制位。这80个二进制位分别是:
          1. 数据对象编号,表明此行所属的数据库对象的编号,每个数据对象在数据库建立的时候都被唯一分配一个编号,并且此编号唯一。数据对象编号占用大约32位。
          2. 对应文件编号,表明该行所在文件的编号,表空间的每一个文件标号都是唯一的。文件编号所占用的位置是10位。
          3. 块编号,表明改行所在文件的块的位置块编号需要22位。
          4. 行编号,表明该行在行目录中的具体位置行编号需要16位。
    这样加起来就是80位。
    
     
    
    Oracle的物理扩展ROWID有18位,每位采用64位编码,分别用A~Z、a~z、0~9、+、/共64个字符表示。A表示0,B表示1,……Z表示25,a表示26,……z表示51,0表示52,……,9表示61,+表示62,/表示63。
    
    owid一般用不到,Oracle内部用来存储行的物理位置,和分页相关的就是rownum,也就是行号

    1.查询小于4的行,查询出三条结果

    SELECT ROWNUM,a.* FROM A a where rownum <4;

    2 查询大于2小于5的行

    例子:select rownum,Aid,aname from A where rownum>2 and rownum <5;

    你会发现这个为空,
    
    ROWNUM  只适用与小于或者小于等于,如果进行等值判断那么只能为1
    
    ROWNUM 在oracle是系统分配顺序的编号,返回的第一行分配的是1,第二行是2,后面依次类推
    
    ROWNUM 总是从1开始
    
    ROWNUM 若进行等值判断 需要满足两个条件ROWNUM>1,则第一行被去掉,之前的第二行变为新的第一行,如此下去,一直到最后,条件都无法满足,所以一条数据都无法查出
    3.分页的正确,应该用嵌套的SQL
    
    select rownum ,a.AID FROM 
    (SELECT ROWNUM ,AID,ANAME FROM A) a
    where rownum>0 and rownum<5;

    4,如果要进行分页
    
    加入现在是第num页,每页显示PAGESIZE条记录,则这个如何写
    r>PAGESIZE*(num-1) 前面的页数
    r<PAGESIZE*num+1 后面的页数

    5.还有一种用函数计算范围 between and

    SELECT *
    FROM (SELECT a.*, ROWNUM FROM (SELECT * FROM A) a)
    WHERE ROWNUM BETWEEN 0 AND 5;

  • 相关阅读:
    吴恩达机器学习课程笔记章节二单变量线性回归
    cs224n第六讲依存分析
    吴恩达机器学习课程笔记章节一绪论
    cs224n第二讲词向量表示:word2vec
    cs224n第一讲深度自然语言处理
    DIY的.net正则表达式工具
    不写一行代码,利用常用工具和软件批量下载URL资源
    WEB页面采集器编写经验之一:静态页面采集器
    大规模IP地址黑名单高性能查询实现
    安卓开发入门与面试题01(潭州安卓开发入门教程)
  • 原文地址:https://www.cnblogs.com/yijieyufu/p/11148739.html
Copyright © 2011-2022 走看看