51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 949|回复: 0
打印 上一主题 下一主题

上海-181

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-5-23 19:20:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
学习了这么久  以下是自己对oracle   rownum的一些总结



首先:ROWNUM就是一个伪列,它是要先生成,在使用,所以如果是再写语句的时候,写错乱了就会出现问题。

第一:比如写一个最简单的,SELECT ROWNUM AS RN, TBL.* FROM TBL,看出点什么?就跟语句跟它加了一个编号而已,

这个编号是一伪编号,当然可能是我的理解还不够到位,不过多写语句之后,还是理解出了一点点。

第二:又来一条SELECT ROWNUM AS RN , TBL.* FROM TBL  WHERE RN>0 AND RN<10
和SELECT ROWNUM AS RN , TBL.* FROM TBL  WHERE ROWNUM>0 AND ROWNUM<10,显然了吧,RN是无效的字符。

这里就可以声明一点就是,一切数据都是从表当中来的,如果你想凭空产生一些,你就要先声明,插入你的结果集当中,
比如:SELECT 'CUSTOM' AS CUSTOM, TBL.* FROM TBL就会出现常量字段,并且所有值都是CUSTOM,只不过这个ROWNUM是oracle的一个数据量给用户使用而已,
在使用的时候,也得先得到数据,他会给你自动排列,(所以这个还是有一个很好的功能,这里虽然说得不伦不类,只是自己的原因,
因为你在写的时候,比如第二点的第二条语句,他就会出来数据,这是为什么?就是可以在后面使用)而不用你去写什么函数啊,
之类的来自己排列一样。所以对于大于(>),小于(<),包括加上等于之类的
都需要注意一下原理就可以了,就跟网上说的很多一样,为什么会写>1的时候,没有数据,

在itput上看到一个很久以前的说法,觉得很好==
OWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。如果你用>,>=,=,between...and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下条,可是它的rownum还是1,又被删除,依次类推,便没有了数据。
,其实在理解了它是伪列,使用的时候,先查询,后来选择列就没问题了,比如:
select *
from (selet rownum as  rn,t1.* from a where ...)
where rn >10一切搞定。当然,语句写多了,稍微思考一点点,也是可行的。

好了 今天就到这 让我们一起加油吧

C:\Users\Administrator
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-4-20 09:41 , Processed in 0.064720 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表