Oracle数据库应用SQL语句进行分页,以及引申出来对rownum的理解
2009-09-27 19:57
381 查看
分页的的方法从数据获取的角度上说,可以分为两种:
其一,从数据库取出所有满足条件的数据,放入内存,然后在呈现的时候过滤,达到分页效果;
其二,在SQL语句的写法上下文章,根据传入的页码、行数,只取出要显示部分的记录;
我在项目中一般是用第二种方法,对于第一种方法的不足,数据量的增加会造成服务器内存消耗过大及带宽不足等性能
瓶颈。
分页SQL语句的写法如下:
SELECT * FROM(SELECT rownum as rn,t.* from T WHERE rownum<50)WHERE rn >10
其中rownum的作用很关键,这里如果写成:
SELECT * FROM(SELECT rownum as rn,t.* from T WHERE rownum>10)WHERE rn <50 效果是一样的么?答案是:NO!这种写法只能得到空结果集,之所以会这样,就要从rownum的概念上来思考得出答案了。
rownum是一个始终从1开始递增的伪列,是数据库从数据文件或缓冲区中读取数据的顺序。
它取的第一条记录的rownum值为1,接着为2,以此类推一直到指定的大小。如果直接取rownum大于10的记录,
那么它的第一条记录(rownum为1)取出来后则会被删除,然后再取第二条,这时这条记录的rownum还是为1,这样
下去,rownum始终都为1,永远无法达到10,所以第二条SQL语句无法取到任何结果集。所以,在SQL语句中,使用
rownum>x(x>=1)这种写法是得不到数据的,如果x=0,也可以取得数据,但是这样没有什么意义的。
以上,我们得出结论:想直接跨过rownum=1这条记录是完全不可能的!
那么,要应用rownum实现分页数据的查询,就必须把rownum先生成,将其作为子查询进行搜索。即如第一种写
法这样实现。
其一,从数据库取出所有满足条件的数据,放入内存,然后在呈现的时候过滤,达到分页效果;
其二,在SQL语句的写法上下文章,根据传入的页码、行数,只取出要显示部分的记录;
我在项目中一般是用第二种方法,对于第一种方法的不足,数据量的增加会造成服务器内存消耗过大及带宽不足等性能
瓶颈。
分页SQL语句的写法如下:
SELECT * FROM(SELECT rownum as rn,t.* from T WHERE rownum<50)WHERE rn >10
其中rownum的作用很关键,这里如果写成:
SELECT * FROM(SELECT rownum as rn,t.* from T WHERE rownum>10)WHERE rn <50 效果是一样的么?答案是:NO!这种写法只能得到空结果集,之所以会这样,就要从rownum的概念上来思考得出答案了。
rownum是一个始终从1开始递增的伪列,是数据库从数据文件或缓冲区中读取数据的顺序。
它取的第一条记录的rownum值为1,接着为2,以此类推一直到指定的大小。如果直接取rownum大于10的记录,
那么它的第一条记录(rownum为1)取出来后则会被删除,然后再取第二条,这时这条记录的rownum还是为1,这样
下去,rownum始终都为1,永远无法达到10,所以第二条SQL语句无法取到任何结果集。所以,在SQL语句中,使用
rownum>x(x>=1)这种写法是得不到数据的,如果x=0,也可以取得数据,但是这样没有什么意义的。
以上,我们得出结论:想直接跨过rownum=1这条记录是完全不可能的!
那么,要应用rownum实现分页数据的查询,就必须把rownum先生成,将其作为子查询进行搜索。即如第一种写
法这样实现。
相关文章推荐
- 一道练习题引申出来的知识点(五) 常用的sql语句 以及相关概念
- Oracle数据库 根据时间范围 查询 时间范围内的 年 ,月, 日 以及 一天的24小时 (SQL 语句)
- PowerDesigner15在win7-64位系统下对MySQL 进行反向工程以及建立物理模型产生SQL语句步骤图文傻瓜式详解
- 使用SQL语句对Oracle数据库数据进行拼接
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-使用UDA操纵SQL语句
- python用sql的limit语句进行分页
- PowerDesigner15在win7-64位系统下对MySQL 进行反向工程以及建立物理模型产生SQL语句步骤图文傻瓜式详解
- PL/SQL在取行、取列、取行列以及分页中的应用
- Oracle、SQL Server、Access利用SQL语句进行高效果分页
- 三滴水:光说不练假把式,Flask关于请求表单的粗浅应用及理解+简单SQL语句温习
- 对结果集进行分页SQL语句
- PowerDesigner15在win7-64位系统下对MySQL 进行反向工程以及建立物理模型产生SQL语句步骤图文傻瓜式详解
- 三种数据库利用SQL语句进行高效果分页
- 先去重复再进行分页的SQL语句
- PowerDesigner15在win7-64位系统下对MySQL 进行反向工程以及建立物理模型产生SQL语句步骤图文傻瓜式详解
- PowerDesigner15在win7-64位系统下对MySQL 进行反向工程以及建立物理模型产生SQL语句步骤图文傻瓜式详解
- MyBatis中实现动态的SQL语句、分页以及mybatis的常用的配置
- MyBatis中实现动态的SQL语句,分页以及mybatis的常用的配置
- 使用SQL语句来进行分页处理
- rownum与Oracle分页SQL 以及提高分页查询效率