通过rownum实现分页
来源:互联网 发布:linux 服务启动命令 编辑:程序博客网 时间:2024/05/22 14:45
//一个oracle分页,至少要包含三层(除非不用order by,暂时可以用2层实现),模板为
select temp2.* from(
select rownum num,temp1.* from(
SQL query
) temp1 where rownum<=n1
)temp2 where temp2.num>n2
-
//分析:
//1.首先是一个正常的查询语句(包含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语句没有任何的区别
--
//2.添加rownum字段,显示列数(注意:rownum一定是先<n1,嵌套后再>n2)
select rownum num,temp1.*
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) temp1
where rownum<=20
//我们添加了rownum 显示字段,这时候就会会每行添加一个行数的编号;并且只返回20条之前的数据(包含20条)
--
//3.截取第10条到20条的数据
//例如:值返回查询结果第11条到20条着10条的信息的SQL如下:
select temp2.*
from(
select rownum num,temp1.*
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) temp1
where rownum<=20
)temp2
where temp2.num>10
//使用精解:
//1.rownum的使用:
//如下两条语句:
select rownum,id,name from student where rownum>2;
select rownum,id,name from student where rownum<=10;
--
//第一条语句的执行结果为空,第二条语句的执行结果为前10条记录;
//为什么会这样呢,我们知道rownum是伪列,是oracle为查询结果自动添加的伪列,第一行是1,
//如果where rownum>2,这时候查找第一条发现它的rownum=1,不满足条件,于是抛弃掉,
//把第二条语句的rownum赋值为1,再判断第二条记录是否满足条件,同样不满足。。。。
//于是发生了死循环一样的判断,最终返回空;
//有人这时候就奇怪啦,为什么第一条记录rownum=1不满足条件时候,第二条记录rownum=2,却要重新设值为1呢?
//非常简单,你直接在where后添加了条件rownum>2,它是个条件啦,
//第一条记录不满足条件,叫抛弃掉啦,这时候结果集是空的,当然会一直rownum=1的赋值;
//解决办法:先查询,并为每条记录分配rownum,然后嵌套查询
select t.* from (select rownum num,id,name from student) t where t.num>2
//第二条语句可以正常的执行,根据上面的解释,这个可以理解了吧!
--
//2.rownum与order by同时存在的问题
//当 where 后面有rownum的判断,并且存在order by时候,rownum的优先级高!
//oracle会先执行rownum的判断,然后从结果中order by,很明显是错误的结果啦!
//就好像学校要取成绩最好的前10名同学,结果这种方法一执行,成了取出10名同学,然后按照成绩的高低排序!
//这点与SQL Server的TOP完全不同,TOP遇上order by,是先执行order by,在分页的;
//解决办法就是先执行order by,然后嵌套执行rownum
//说白啦就是用()改变函数的优先级!
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2011-05/35496.htm
- 通过rownum实现分页
- oracle 通过rownum实现分页
- 使用ROWNUM实现分页
- 利用rownum实现分页
- oracle用 rownum 实现分页
- oracle rownum 原理及分页查询实现
- oracle中如何用rownum实现分页
- Oracle rownum用法详解,可以实现分页
- Oracle中实现分页技术的ROWNUM
- 利用Oracle伪例-ROWNUM实现分页
- 通过servlet实现分页
- ORACLE三层嵌套实现分页功能和ROWNUM的使用
- oracle中分页的实现方式.rownum的使用
- 结合JDBC和Oracle ROWNUM实现分页查询
- 通过给rownum起别名来实现where rownum>的查询
- Oracle rownum应用于分页
- Oracle rownum 分页注意事项
- Oracle rownum 分页, 排序
- gprs气象无线智能监测
- 11g New Feature dbms_stats Pending and Published Statistics
- 关于自己的一点心得EXtjs
- SQL Sever 2008 修改表结构
- 英语面试常见案例
- 通过rownum实现分页
- [推荐] 得到一个给定用户使用了的权限脚本
- IPv6学习笔记 (1) ---- 基本术语
- 推箱子(proteus仿真)
- 打开浏览器 与 抓取网站内容
- Linux下通过freetds连接MSSQL数据库
- SVN-CVS-VSS的区别
- MC703 3G模块联系人名称编解码问题
- SharePoint2010 安装方法