-
最近再写Oracle的ROWNUM分页时,发现一个问题,高手进来讨论下10
以下是我写的两个语句,都可以实现分页,但是问题是结果集竟然不一样,看官网文档对ROWNUM的原理描述,还是不太清楚怎么回事,请大家指教。语句1:
select e2.* from (select e1.*, rownum rn from (select * from illegalinfo order by sitename) e1) e2 where e2.rn < 101 and e2.rn >= 90;
内层查出基本数据,中间层子查询加上ROWNUM, 最外层用rn限制结果集
语句2:
select e2.* from (select e1.*, rownum rn from (select * from illegalinfo order by sitename) e1 where rownum < 101) e2 where e2.rn >= 90;
内层查出基本数据,在中间层子查询中加上ROWNUM、砍掉一部分记录,外面再筛选出最终结果集
可以看到两条语句查出的语句结果集是不一样的(红色框标出来的部分),具体什么原因还不清楚,大家研究下
问题补充:<div class="quote_title">kidding87 写道</div><div class="quote_div">select * from illegalinfo order by sitename <br />第一个sql有问题,因为就算你里面order by 了对于oralce作为结果集并没有排序 <br />,所以你order by根本没有起到作用,不信你把这个去掉看看,是不是一样的 <br /> <br /> <br />还有你的数据库的内容,敢不敢把url露出来!!!</div> <br />怎么会呢,结果集是排过序的,去掉和加上是不一样的
问题补充:表名和内容你们就不要过于关注了哈<div class="quote_title">OpenMind 写道</div><div class="quote_div">人家这个是illegalinfo ,illegal,是正派的</div> <br />
问题补充:<div class="quote_title">OpenMind 写道</div><div class="quote_div">你改成 order by sitename,INFOID试试看结果是否相同</div> <br /> <br /> 这样确实一样,具体什么原因呢,能不能从原理上分析一下
问题补充:<div class="quote_title">OpenMind 写道</div><div class="quote_div">你改成 order by sitename,INFOID试试看结果是否相同</div> <br /> 而且这样的话等于是用两个字段排序,和只用sitename排序时结果集不一样了,不是用户想看到的结果了
问题补充:<div class="quote_title">OpenMind 写道</div><div class="quote_div">你用order by sitename,而sitename很多记录都是一样的,sitename相同的记录怎么排序?你没有指定,oracle会随便取很多记录,这样结果就不一样的了。</div> <br /> 我执行多次两种方式查出来结果集都是这样,说明它也不是随机取的呀<img src="/images/smiles/icon_cool.gif"/>
问题补充:<div class="quote_title">kidding87 写道</div><div class="quote_div">select * from (select t.*,rownum as rn from (select * from tab order by tname) t ) a where a.rn>=5 and a.rn<11; <br /> <br />select * from (select t.*,rownum as rn from (select * from tab order by tname) t where rownum <11) where rn>=5; <br /> <br />我的是一样的!</div> <br /> <br />排序的tname如果有重复,或者数据量大一点的话,往下翻看几页就会发现不同了,你可以测试一下2012年2月28日 15:32
8个答案 按时间排序 按投票排序
-
select * from (select t.*,rownum as rn from (select * from tab order by tname) t ) a where a.rn>=5 and a.rn<11;
select * from (select t.*,rownum as rn from (select * from tab order by tname) t where rownum <11) where rn>=5;
我的是一样的!2012年2月29日 09:10
-
你用order by sitename,而sitename很多记录都是一样的,sitename相同的记录怎么排序?你没有指定,oracle会随便取很多记录,这样结果就不一样的了。
2012年2月28日 17:10
-
select * from illegalinfo order by sitename
第一个sql有问题,因为就算你里面order by 了对于oralce作为结果集并没有排序
,所以你order by根本没有起到作用,不信你把这个去掉看看,是不是一样的
还有你的数据库的内容,敢不敢把url露出来!!!2012年2月28日 16:29
相关推荐
可如果用 select rownum,c1 from t1 where rownum > 10 (如果写下这样的查询语句,这时候在您的头脑中应该是想得到表中后面10条记录),你就会发现,显示出来的结果要让您失望了,也许您还会怀疑是不谁删了一些记录,...
这种方法简单直接,但存在一个问题:由于ROWNUM是在查询开始时就确定的,所以它不能保证结果集的顺序,除非在外部查询中指定ORDER BY。 2. ROWNUM结合子查询方法: 为了解决ROWNUM无法与ORDER BY一起使用的问题,...
Oracle数据库在处理大数据量时,分页查询是一个非常重要的功能,它可以帮助用户高效地浏览和检索数据,而无需一次性加载所有结果。Oracle提供多种方法来实现分页,这些方法各有优缺点,适用于不同的场景。本篇文章将...
使用`ROWNUM`进行分页可能会遇到性能问题,因为它会先获取所有满足条件的行,然后再筛选出需要的页。为了优化,可以尝试使用`OFFSET-FETCH`或`FETCH FIRST`语法(需要Oracle 12c及以上版本),或者结合`CTE(公用表...
在Oracle数据库中,分页查询是一项非常常见的操作,特别是在处理大量数据时,为了提高用户体验,我们通常会将数据分批加载,这就是所谓的“分页”。Java作为一种常用的后端开发语言,提供了多种方式来实现对Oracle...
在处理大数据时,ROWNUM可能会遇到问题,因为它会在内存中累积所有符合条件的行,然后再过滤。因此,对于大数据量的分页,使用窗口函数或新的FETCH语法通常更有效。 通过理解这些Oracle分页技术,开发者可以更好地...
ROWNUM是Oracle中的一个伪列,它在查询结果集中为每一行分配一个唯一的数字。在处理大数据集时,ROWNUM可以帮助我们实现分页或者只获取前n条记录。例如,如果我们只想获取前10条记录,可以这样写: ```sql SELECT * ...
在Oracle数据库中,`ROWNUM`是一个非常重要的概念,它是一个伪列,用于标识查询结果集中每一行的顺序。在处理大数据集时,`ROWNUM`通常被用来实现分页功能,即限制返回的结果数量。下面我们将深入探讨`ROWNUM`的使用...
相比之下,物理分页是数据库系统直接提供的功能,如SQL的`LIMIT`和`OFFSET`子句(在MySQL中)或`ROWNUM`(在Oracle中)。这种方法通常更高效,因为它只从数据库中获取每页所需的数据。 5. **优化逻辑分页** 为了...
接下来,我们讨论子查询,这是SQL语言中的一个重要特性,允许在一个查询中嵌套另一个查询。 1. 子查询可以返回单行单列的结果,通常用于条件判断。例如,找出工资高于平均工资的员工,可以先用子查询获取平均工资,...
- ROWNUM和ORDER BY一起使用时,需确保先进行排序再使用ROWNUM。 #### 性能 **ROWNUM的使用陷阱:** - 应避免对ROWNUM进行等于、大于等于或大于的操作,因为这些操作可能导致非预期的结果。 **ROWNUM和ORDER BY:...
- MySQL不允许在一个表中先查询再更新,但可以通过为子查询的表添加别名来解决这个问题。 3. **自动增长字段**: - MySQL有`AUTO_INCREMENT`字段,插入新记录时系统自动递增。而Oracle需要创建序列对象,插入时...
认真听课、多思考问题、多动手操作、有问题一定要问、多参与讨论、多帮组同学 五、 体系结构 oracle的体系很庞大,要学习它,首先要了解oracle的框架。oracle的框架主要由物理结构、逻辑结构、内存分配、后台进程...
- **SQL语句**: 找到下一个星期一: - `SELECT NEXT_DAY(SYSDATE, 'MONDAY') FROM DUAL;` #### 22. 计算3个月之后的日期 - **知识点**: 使用`ADD_MONTHS`函数添加月份。 - **SQL语句**: 计算三个月后的日期: - `...
5. 有一种细菌,经过一分钟分裂为2个,再过一分钟,分裂为4个,这样,将一个细菌放在一个瓶子里面,一个小时后瓶子被细菌充满了。现在假设一开始放入瓶中的为两个细菌,那么到充满瓶子要多长的时间?这道题目考查了...
Java必备知识点大全的内容非常丰富,涵盖了Java语言的基础知识、常用的框架以及数据库的应用等方面,是每一个Java开发者学习和面试时的重要参考。下面是对文档中各个知识点的详细解析。 基础篇: JDK常用的包:Java...
在处理SQL语句时,其中所有的空格都被忽略(空格只用来分开单词,连续多个空格当一个用)。 SQL语句可以在一行上写出,建议多行写出,便于阅读和调试。 多条SQL语句必须以分号分隔。多数DBMS不需要在单条SQL语句后...
- 定义对象间的一种一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 #### 第六层: 算法招式辨析 **1. 递归算法** - **递归**是一种重要的算法思想,通过函数自身调用...