



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.ROWNUM的使用TOP-N分析使用SELECT语句返回的结果集,若希望按特定条件查询前N条记录,可以使用伪列ROWNUM。ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。简单的说ROWNUM是符合条件结果的序列号。它总是从1开始排起的。使用ROWNUM时,只能使用、 select * from student;ID NAME- -200001 张一200002 王二200003 李三200004 赵四 rownum 对于等于某值的查询条件 如果希望找到学生表中第一条学生的信息,可以使用rownum=1作为条件。但是想找到学生表中第二条学生的信息,使用rownum=2结果查不到数据。因为rownum都是从1开始,但是1以上的自然数在rownum做等于判断时认为都是false条件,所以无法查到rownum = n(n1的自然数)。SQL select rownum,id,name from student where rownum=1; ROWNUM ID NAME - - - 1 200001 张一 SQL select rownum,id,name from student where rownum =2; 未选定行 rownum对于大于某值的查询条件 如果想找到从第二行记录以后的记录,当使用rownum2是查不出记录的,原因是由于rownum是一个总是从1开始的伪列,Oracle 认为rownum n(n1的自然数)这种条件依旧不成立,所以查不到记录。 SQL select rownum,id,name from student where rownum 2; 未选定行那如何才能找到第二行以后的记录呢?可以使用子查询方法来解决。注意子查询中的rownum必须要有别名,否则还是不会查出记录来,这是因为rownum不是某个表的列,如果不起别名的话,无法知道rownum是子查询的列还是主查询的列。 SQLselect * from(select rownum no ,id,name from student) where no2; NO ID NAME - - - 3 200003 李三 4 200004 赵四 SQL select * from(select rownum,id,name from student)where rownum2; 未选定行 rownum对于小于某值的查询条件 如果想找到第三条记录以前的记录,当使用rownum3是能得到两条记录的。显然rownum对于rownum1的自然数)的条件认为是成立的,所以可以找到记录。 SQL select rownum,id,name from student where rownum select * from (select rownum no,id,name from student where rownum=2; NO ID NAME - - - 2 200002 王二 3 200003 李三 rownum和排序 Oracle中的rownum是在取数据的时候产生的序号,所以想对指定排序的数据指定rowmun行数据就必须注意了。 SQL select rownum ,id,name from student order by name; ROWNUM ID NAME - - - 3 200003 李三 2 200002 王二 1 200001 张一 4 200004 赵四 可以看出,rownum并不是按照name列来生成的序号。系统是按照记录插入时的顺序给记录排的号,rowid也是顺序分配的。为了解决这个问题,必须使用子查询 SQL select rownum ,id,name from (select * from student order by name); ROWNUM ID NAME - - - 1 200003 李三 2 200002 王二 3 200001 张一 4 200004 赵四 这样就成了按name排序,并且用rownum标出正确序号(由小到大)。order by name 如果name是主键或有索引 ,查询出来的rownum完全按照1,2,3.的次序。 SQL alter table student add constraint pk_stu primary key(name);SQL select rownum ,id,name from student order by name; ROWNUM ID NAME - - - 1 200003 李三 2 200002 王二 3 200001 张一 4 200004 赵四 2. ROWID的使用快速删除重复的记录ROWID是数据的详细地址,通过rowid,oracle可以快速的定位某行具体的数据的位置。ROWID可以分为物理rowid和逻辑rowid两种。普通的表中的rowid是物理rowid,索引组织表(IOT)的rowid是逻辑rowid。当表中有大量重复数据时,可以使用ROWID快速删除重复的记录。举例:-建表tblSQL create table stu(no number,name varchar2(10),sex char(2);-添加测试记录SQL insert into stu values(1, ab,男);SQL insert into stu values(1, bb,女);SQL insert into stu values(1, ab,男);SQL insert into stu values(1, ab,男);SQLcommit;删除重复记录方法很多,列出两种。 通过创建临时表可以把数据先导入到一个临时表中,然后删除原表的数据,再把数据导回原表,SQL语句如下:SQLcreate table stu_tmp as select distinct* from stu;SQLtruncate table sut;/清空表记录SQLinsert into stu select * from stu_tmp;/将临时表中的数据添加回原表这种方法可以实现需求,但是很明显,对于一个千万级记录的表,这种方法很慢,在生产系统中,这会给系统带来很大的开销,不可行。 利用rowid结合max或min函数使用rowid快速唯一确定重复行结合max或min函数来实现删除重复行。SQLdelete from stu a where rowid not in (select max(b.rowid) from stu b where a.no=b.no and = and a.sex = b.sex);/这里max使用min也可以或者用下面的语句SQLdelete from stu a where rowid (select max(b.rowid) from stu b where a.no=b.no and = and a.sex = b.sex);/这里如果把max换成min的话,前面的where子句中需要把跟上面的方法思路基本是一样的,不过使用了group by,减少了显性的比较条件,提高效率。SQLdelete from stu where rowid not in (select max(rowid) from stu t group by t.no
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全隐患排查方法
- 班会课件-奋斗
- 2024年陕西高中学业水平合格性考试地理试卷真题(含答案)
- 2024年7月人工智能核心算法测试题(含答案解析)
- 7月(光纤通信)职业技能鉴定四级模考试题及答案(附解析)
- 幼儿主题教育学会分享
- 证券市场分层与差异化服务考核试卷
- 初中教育信息与技术融合实践
- 羽绒制品绿色生产理念与实践考核试卷
- 工业设计课件全套
- 《俄罗斯债务危机》课件
- 专题05-必修三-必过知识点清单(解析版)(新教材北师大版)
- 2025年广东工业大学招聘行政助理1名历年高频重点提升(共500题)附带答案详解
- 铁路机车车辆制动钳工(高级)职业鉴定考试题库(含答案)
- 推拿培训协议合同范例
- 《便携式挥发性有机物检测仪 (PID)技术要求及监测规范》
- 甲亢碘131治疗的护理
- 2024年10月广东省高等教育自学考试08263工程经济学与项目资源试题及答案
- 吉林交通职业技术学院《工程造价》专业人才培养方案3年制(2019版)
- 2024年职业培训学校安全管理制度范文(二篇)
- 员工培训流程图
评论
0/150
提交评论