知识大全 使用三层嵌套正确实现Oracle分页

Posted

篇首语:知识的价值不在于占有,而在于使用。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用三层嵌套正确实现Oracle分页相关的知识,希望对你有一定的参考价值。

使用三层嵌套正确实现Oracle分页  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  原始记录

  select t * t rowid from t_stu t

  order by t s_birthday desc

  返回

  STU_ID S_NAME C_ID S_BIRTHDAY

  S 李四   C

  S 张    C

  S 张    C

  S 张    C

  S 张    C

  Oracle分页查询

  第一种 两层嵌套查询(网上流行的一种错误)

  select * from

  (

  select rownum r t * from t_stu t

  )

  where r beeen and order by s_birthday desc

  返回

  R STU_ID S_NAME C_ID S_BIRTHDAY

   S 李四   C

   S 张三丰 C

   S 张三   C

  说明 上面的结果可能与你的不一样 因为Oracle在没有order by的情况 是随机选取记录的 前 名的记录应该是

  STU_ID S_NAME C_ID S_BIRTHDAY

  S 李四   C

  S 张    C

  S 张    C

  第二种 换用三层嵌套查询

  select b * from

  (select rownum r a * from

  (select t * from t_stu t order by s_birthday desc )a

  )b

  where b r beeen and

  返回

  R STU_ID S_NAME C_ID S_BIRTHDAY

   S 李四   C

   S 张    C

   S 张    C

  正确!

  所以Oracle分布查询一定要用三层嵌套 步骤如下

   第三层 分页过滤

  select b *

  from (

   第二层 给定行号

  select rownum r a * from (

   第一层 排序

  select * from 表 order by 字段

  ) a

  where rownum<=最大行

  )b

  where b r beeen 最小行 and 最大行

  关键点 先排序 后给行号 两个步骤要分开!

  为了程序的通用性 对任意数据集都能分页 利用子查询改为如下结构

   第三层 分页过滤

  select b *

  from (

   第二层 给定行号

  select rownum r a * from (

   第一层 排序

  select * from (一个已经排序的数据集)

  ) a

  where rownum<=最大行

  )b

  where b r beeen 最小行 and 最大行

  如上面的查询改为

   第三层 分页过滤

  select b *

  from (

   第二层 给定行号

  select rownum r a * from (

   第一层 排序

  select * from (select t * from t_stu t order by s_birthday desc)

  ) a

  where rownum<=最大行

  )b

  where b r beeen 最小行 and 最大行

  或者其它查询语句

   第三层 分页过滤

  select b *

  from (

   第二层 给定行号

  select rownum r a * from (

   第一层 排序

  select * from (select t * from   新闻表 t order by 发贴日期 desc)

  ) a

  where rownum<=最大行

  )b

  where b r beeen 最小行 and 最大行

  原始数据数据脚本(请在命令窗口中粘贴以下语句即可)

  prompt PL/SQL Developer import file

  prompt Created on 年 月 日 星期一 by Administrator

  set feedback off

  set define off

  prompt Dropping T_STU

  drop table T_STU cascade constraints;

  prompt Creating T_STU

  create table T_STU

  (

  STU_ID     CHAR( )

  S_NAME     CHAR( )

  C_ID       CHAR( )

  S_BIRTHDAY DATE

  S_SEX       CHAR( )

  )

  ;

  prompt Disabling triggers for T_STU

  alter table T_STU disable all triggers;

  prompt Loading T_STU

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张三   C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 李四   C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张三丰 C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  insert into T_STU (STU_ID S_NAME C_ID S_BIRTHDAY S_SEX)

  values ( S 张    C to_date( dd mm yyyy ) null);

  mit;

  prompt records loaded

  prompt Enabling triggers for T_STU

  alter table T_STU enable all triggers;

  set feedback on

  set define on

cha138/Article/program/Oracle/201311/18196

相关参考

知识大全 oracle分页详解(rownum与orderby)

  Oracle的分页是通过rownum实现的  rownum是一个伪列是oracle系统自动为查询返回结果的每行分配的编号第一行为第二行为以此类推  一个oracle分页至少要包含三层(除非不用or

知识大全 三层+存储过程实现分页示例代码

  前台设计复制代码代码如下:<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="pagingaspxcs"Inherits="五二一练习

知识大全 Oracle数据完整性嵌套事务调用分析研究

Oracle数据完整性嵌套事务调用分析研究  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本文分析一

知识大全 Oracle数据的完整性的嵌套事务调用的研究

Oracle数据的完整性的嵌套事务调用的研究  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  为了

知识大全 Oracle数据库为了数据的完整性的嵌套事务调用的研究

Oracle数据库为了数据的完整性的嵌套事务调用的研究  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 oracle存储过程分页代码

  oracle存储过程分页代码是怎么实现的我们来看下实验小编为您整理的方法吧!  /*******存储过程分页代码**********/  包头  createorreplacepackagepck

知识大全 特殊需求下Oracle分页的加速

特殊需求下Oracle分页的加速  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle分页

知识大全 Oracle三层认证计划

Oracle三层认证计划  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    作者亿书     O

知识大全 oracle,sqlserver2000分页查询

  前台Ext后台ibatis 数据库分页  ORACLE:  SELECT*FROM(SELECT A*ROWNUMRNFROM表名AWHERE 字段名LIKE(%||

知识大全 Oracle常见SQL分页实现方案

Oracle常见SQL分页实现方案  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Oracle