oracle 翻页查询
来源:互联网 发布:ping ip地址加端口号 编辑:程序博客网 时间:2024/06/10 11:05
select ename from(select ename,rownum rn from (select * from emp order by empno) where rownum<10)where rn >=4;
select * from (select ACCOUNTS,MESSAGE,STATUS,rownum rn from (select * from operate_log where ACCOUNTS='18959819876' and CREATETIME between to_date('2014-01-01','yyyy-mm-dd') and to_date('2014-7-01','yyyy-mm-dd') order by ACCOUNTS) where rownum < 100) where rn >= 4;
这是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第二层的查询条件WHERE ROWNUM <= 40就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。
而第二个查询语句,由于查询条件BETWEEN 21 AND 40是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)。因此,对于第二个查询语句,Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。
ROWNUM伪列:
1、使用SELECT语句返回的结果集,希望按特定条件查询前N条记录,可以使用伪列ROWNUM。ROWNUM是对结果集加一个伪列,先查到结果集后再加上一个列,是符合条件结果的序列号;从1开始排起,只能用< > = !=这些比较符合。
ROWNUM对于等于某值的查询条件,比如查询第一条记录,可以使用ROWNUM=1作为条件;但是如果查询第二条记录写ROWNUM=2则查询不到数据,ROWNUM的=判断只对于1有效;
2、同理,查询大于某值的查询条件,ROWNUM>n(n>1的自然数)这种条件不成立;那如何查询第一行以后的记录呢?
solution:用子查询解决,但是必须为rownum设置别名,"select * from (select rownum no,id,name from table1) where no >1";
3、ROWNUM对于小于某值的查询是可以的,select * from table1 where rownum<3
4、ROWNUM和排序
Oracle中rownum是在取数据时产生的序号,想对指定排序的数据指定rownum行数据就要做处理了:
"select rownum,id,name from table1 order by name",查询结果按name排序,但是rownum不是按1、2、3...排列,而是按记录插入时的顺序给记录排号;
solution:使用子查询,select rownum ,id,name from(select * from table1 order by name)
- oracle 翻页查询
- 关于查询和 翻页
- SQL 翻页查询
- ElasticSearch 翻页查询
- Oracle的翻页SQL
- oracle的翻页
- jsp + oracle翻页
- ORACLE翻页SQL语句
- oracle上下翻页功能
- oracle按时间查询翻页时出现与前面一页重复数据
- SQL语句查询翻页优化
- AspNetPager按条件查询翻页
- MySQl存储过程翻页查询
- 二次开发查询翻页的问题
- Extjs 4.0 查询翻页问题
- Oracle的翻页Sql语句
- Oracle的翻页Sql语句
- Oracle的翻页Sql语句
- 光盘内容记录工具-源代码
- Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’
- achartEngineDemo1.0 NoClassDefFoundError问题解决
- 图像处理基本算法 车牌识别与定位
- 博客开张
- oracle 翻页查询
- uva216-Getting in Line(网络连线)
- Android将允许纯C/C++开发应用
- python写了个登陆moofeel网站回复帖子并领取魔币的程序
- 检测用户向麦克吹气
- 解读QML之一
- phpmyadmin 错误 #2002 Cannot log in to the MySQL server
- 9,10 IP选路,动态选路
- Android意外情况(来电话,按Home键,内存不足)保存数据的方法