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

Posted 语句

篇首语:先学爬,然后学走。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 oracle分页详解(rownum与orderby)相关的知识,希望对你有一定的参考价值。

  Oracle的分页是通过rownum实现的

  rownum是一个伪列 是oracle系统自动为查询返回结果的每行分配的编号 第一行为 第二行为 以此类推

  一个oracle分页 至少要包含三层(除非不用order by 暂时可以用 层实现) 模板为

  select temp * from(

  select rownum num temp * from(

  SQL查询

  ) temp where rownum<=n

  )temp    where temp num>n

  例如 值返回查询结果第 条到 条著 条的信息的SQL如下

  select temp *

  from(

  select rownum num temp *

  from(

  select tt title_id tt name

  from t_title tt

  where tt name like %美%

  order by tt sort_seqs asc tt title_Id desc) temp

  where rownum<=

  )temp

  where temp num>

  分析

   首先是一个正常的查询语句(包含order by)

  select tt title_id tt name

  from t_title tt

  where tt name like %美%

  order by tt sort_seqs asc tt title_Id desc

  这个和正常的SQL语句没有任何的区别

   添加rownum字段 显示列数

  select rownum num temp *

  from(

  select tt title_id tt name

  from t_title tt

  where tt name like %美%

  order by tt sort_seqs asc tt title_Id desc) temp

  where rownum<=

  我们添加了rownum 显示字段 这时候就会会每行添加一个行数的编号 并且只返回 条之前的数据(包含 条)

   截取第 条到 条的数据 SQL就是上面最完整的那个啦

  使用精解

   rownum的使用

  如下两条语句

  select rownum id name from student where rownum> ;

  select rownum id name from student where rownum<= ;

  第一条语句的执行结果为空 第二条语句的执行结果为前 条记录

  为什么会这样呢 我们知道rownum是伪列 是oracle为查询结果自动添加的伪列 第一行是 如果where rownum> 这时候查找第一条发现它的rownum= 不满足条件 于是抛弃掉 把第二条语句的rownum赋值为 再判断第二条记录是否满足条件 同样不满足 于是发生了死循环一样的判断 最终返回空

  有人这时候就奇怪啦 为什么第一条记录rownum= 不满足条件时候 第二条记录rownum= 却要重新设值为 呢 非常简单 你直接在where后添加了条件rownum> 它是个条件啦 第一条记录不满足条件 叫抛弃掉啦 这时候结果集是空的 当然会一直rownum= 的赋值

  解决办法:先查询 并为每条记录分配rownum 然后嵌套查询

  select t * from (select rownum num id name from student) t where t num>

  第二条语句可以正常的执行 根据上面的解释 这个可以理解了吧!

   rownum与order by同时存在的问题

  当 where 后面有rownum的判断 并且存在order by时候 rownum的优先级高!

  oracle会先执行rownum的判断 然后从结果中order by 很明显是错误的结果啦!就好像学校要取成绩最好的前 名同学 结果这种方法一执行 成了取出 名同学 然后按照成绩的高低排序!

  这点与SQL Server的TOP完全不同 TOP遇上order by 是先执行order by 在分页的

cha138/Article/program/Oracle/201311/17827

相关参考

知识大全 为数据库的表自动生成行号----为分页打好基础

  在以数据库为基础的应用程序开发中分页是一个比较常用的操作可惜的是SQLServer中没有Oracle中相应的ROWNUM属性可用用触发器生成一个ROWNUM列]勉强可以一用当然用如下的SQL语句也

知识大全 Oracle应用——rownum

Oracle应用——rownum  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于rownum

知识大全 ORACLE中ROWNUM用法总结!

ORACLE中ROWNUM用法总结!  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ORACLE

知识大全 Oracle查询rownum和rowid的区别

Oracle查询rownum和rowid的区别  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在

知识大全 Oracle分页查询中排序与效率问题

Oracle分页查询中排序与效率问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  原始未分页查

知识大全 解决Oracle分页查询中排序与效率问题

解决Oracle分页查询中排序与效率问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  原始未分

知识大全 PHP分页显示制作详解

PHP分页显示制作详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  前言  分页显示是一种非常

知识大全 ASP.NET存储过程自定义分页详解

ASP.NET存储过程自定义分页详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

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

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

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

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