实际工作中被rownum困扰了很多次,一直不明白rownum为什么只能用‘<n’ 活‘<=n’做过滤条件,今天翻书时恍然大悟,记下分享\(^o^)/
rownum的存在形式很诡异,被称作‘伪列’,它不是实际存在的列,要区别于rowid他虽然也叫伪列,但是rowid在物理地址中是实际存储并且是用来唯一标识一行记录的列,而rownum则是在内存中当你查询结果集生成后追加到结果集上的一个列,这个列从1开始递增,当你过滤掉第一条数据时rownum的编号会继续从1开始排序,强调的是在你查询结果集经过过滤读入内存后追加在结果集上的列,只要有rownum就必须有rownum=1这个值。我们结合是用例子继续理解rownum
假设有一个表tab1(a)有10条记录分别是a1,a2,a3,a4,a5,a6,a7,a8,a9,a10
1.当我要检索出前5条记录时候我可以写select a from tab1 where rownum<6;查询结果如我们所料,继续看……
2.当我们要检索后5条记录的时候可能会写 select a from tab1 where rownum>5 但是查询结果却是空集,??为什么呢,这就要考虑到他的伪列特性,在每个结果集中rownum都是从1开始取值的,我们限制了rownum>5,那么让我们虚拟一下下数据的读取顺序,首先判断第一条数据,他的rownum=1 小于5不符合条件,排除后rownum=2的记录的rownum变成了1还是小于5继续删除,逐条数据判断后结果集都被排除所以查询结果为空。
3. 为什么 between 1 and 10 或者 between 0 and 10 能查到结果,而用 between 2 and 10 却得不到结果
原因同上一样,因为 rownum 总是从 1 开始
从上可以看出,任何时候想把 rownum = 1 这条记录抛弃是不对的,它在结果集中是不可或缺的,少了rownum=1 就像空中楼阁一般不能存在,所以你的 rownum 条件要包含到 1
4.查询时使用'!='的例子:select rownum,c1 from t1 where rownum != 10 为何是返回前9条数据呢?它与 select rownum,c1 from tablename where rownum < 10 返回的结果集是一样的呢?
因为是在查询到结果集后,显示完第 9 条记录后,之后的记录也都是 != 10,或者 >=10,所以只显示前面9条记录。也可以这样理解,rownum 为9后的记录的 rownum为10,因条件为 !=10,所以去掉,其后记录补上,rownum又是10,也去掉,如果下去也就只会显示前面9条记录了
5. 为什么 rownum >1 时查不到一条记录,而 rownum >0 或 rownum >=1 却总显示所以的记录
因为 rownum 是在查询到的结果集后加上去的,它总是从1开始
6.但如果就是想要用 rownum > 7 这种条件的话话就要用嵌套语句,把 rownum 先生成,然后对他进行查询。
select *
from (selet rownum as rn,t1.* from a where ...)
where rn >7
一般代码中对结果集进行分页就是这么干的。
7.特例就是当共十条数据的时候如果要查询后五条还要用rownum时候可以使用 order by desc 然后用rownum<6就OK了。
正在痛苦的研究表空间resize中,经常被临时表空间和undo表空间无限暴涨而困扰。解决了两次,但是问题的解决过程思路不够清晰。有待研究……
分享到:
相关推荐
ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。如果你用>,>=,=,between...and这些条件,因为从缓冲区或数据文件中得到的第一条记录的...
在Oracle数据库中,`ROWNUM`是一个非常有用的伪列,用于限制查询结果的行数,尤其是在处理大数据量或进行分页查询时。然而,`ROWNUM`的使用并不直观,尤其是当涉及到比较运算符(如`>`, `>=`, `=`等)时,容易引发...
### Oracle中的ROWNUM使用详解 #### 一、ROWNUM简介 在Oracle数据库中,`ROWNUM`是一个非常有用的伪列,它为查询结果中的每一行分配一个唯一的行号。这个行号从1开始,每增加一行,行号就递增1。`ROWNUM`对于数据...
"Oracle 中的 ROWNUM 和 DISTINCT" Oracle 中的 ROWNUM 和 DISTINCT 是两个非常重要的关键词,它们在查询数据时发挥着至关重要的作用。然而,许多开发者在使用这两个关键词时,却常常会遇到一些不太理解的地方,...
Oracle数据库中的ROWNUM是一个非常有用的特性,特别是在处理大型数据集时。ROWNUM是一个伪列,意味着它并不是实际存储在表中的列,而是由查询时的逻辑顺序生成的一个序列号。以下是一些关于ROWNUM的使用技巧和注意...
理解`ROWNUM`的工作原理对于编写高效的Oracle查询至关重要,尤其是在处理大型数据集时,能够帮助我们避免不必要的性能问题。正确使用`ROWNUM`可以让我们更好地控制查询结果的范围,从而实现更精细化的数据处理。
总的来说,理解并掌握Oracle中的ROWNUM用法对于编写高效、精确的SQL查询至关重要。正确使用ROWNUM可以帮助我们限制返回的结果集大小,进行分页,以及在特定条件下选择行。但同时也需要注意其在不同情况下的行为差异...
在Oracle数据库中,`ROWNUM`是一个非常重要的概念,它是一个伪列,用于标识查询结果集中每一行的位置。`ROWNUM`的值从1开始,每次查询时都会为每行新生成一个递增的整数。然而,`ROWNUM`的行为并不总是如我们所预期...
### 在Oracle中灵活使用Rownum和RowId 在Oracle数据库中,`ROWNUM` 和 `ROWID` 是两个非常重要的概念,它们可以帮助我们在查询数据时实现更灵活的数据管理。本文将详细介绍这两个概念的区别及其使用方法,并通过...
Oracle数据库中的ROWNUM是一个非常重要的概念,特别是在处理大型数据集时进行分页查询。ROWNUM是一个伪列,意味着它并不是数据库表中实际存在的列,而是Oracle数据库在执行查询时动态生成的一个序列号,用于标记查询...
Oracle数据库系统是世界上最广泛使用的数据库之一,尤其在企业级应用中占据重要地位。在Oracle中,`ROWNUM`是一个非常重要的概念,它...理解并熟练掌握`ROWNUM`的用法,对于提高Oracle数据库的管理和开发能力至关重要。
本文将详细介绍如何利用Oracle中的`MINUS`操作符以及`ROWNUM`伪列来实现这一功能。 #### ROWNUM伪列简介 在介绍具体方法之前,我们首先了解一下`ROWNUM`伪列的基本概念。`ROWNUM`是Oracle提供的一种特殊的伪列,它...
理解这些技巧对于那些习惯于 Oracle SQL 而又需要在 MySQL 中工作的开发者来说至关重要。希望这些实例和解释能帮助到正在学习和工作中遇到此类问题的朋友。记得在实践中不断尝试和优化,以适应不同的数据库系统。
Oracle数据库中的Rownum是一个非常重要的特性,尤其在处理大量数据和实现分页显示时显得极其关键。Rownum是一个伪列,它并不是数据库表中实际存在的列,而是Oracle在执行查询时动态生成的,用来表示查询结果集中每一...
在Oracle SQL中,`ROWID`和`ROWNUM`是两个非常重要的概念,它们在数据库查询和数据操作中起着至关重要的作用。本文将详细探讨这两个特性,包括它们的定义、用途以及如何在实际场景中有效利用它们。 一、ROWID详解 `...
Oracle中的ROWNUM是一个重要的查询关键字,它用于限制查询返回的行数。ROWNUM是一个伪列,意味着它不是实际存储在表中的列,而是在执行查询时动态生成的。这个关键字在处理大型数据集时非常有用,可以有效地提高查询...
总的来说,理解并掌握如何在Oracle中使用`ROWNUM`进行分页查询是数据库操作中的一个重要技能。在选择分页策略时,需要考虑到性能、可读性和维护性等因素。在实际工作中,根据数据量、查询复杂度以及数据库性能优化的...
综上所述,理解Oracle的ROWNUM特性是高效地处理大量数据的关键。正确地使用ROWNUM,结合适当的排序和子查询,可以有效地实现数据过滤和分页,提高查询性能。在编写SQL语句时,应根据具体需求灵活运用ROWNUM,以确保...
在Oracle数据库中,`ROWNUM` 和 `ROW_NUMBER()` 是两个非常重要的概念,它们都用于为查询结果集的每一行分配一个唯一的数字。然而,两者在使用方式和功能上存在一定的差异。 首先,`ROWNUM` 是Oracle的一个内置伪列...
在实际开发中,理解并合理利用`ROWID`和`ROWNUM`,可以有效地提升Oracle数据库的管理和查询效率。同时,从提供的压缩文件名来看,除了`oracle_SQL中rowid与rownum的使用.doc`直接相关外,其他文件如`ssi2配置整合...