`
勒布朗
  • 浏览: 71317 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

oracle中的rownum和rowid的作用及区分

阅读更多
最近有时间把前面的知识再复习了一遍,感觉好多知识又模糊了,发现技术这东西,只要歇一段时间不看就容易忘。现在就说说rownum和rowid的区别吧。
rownum和rowid都是伪列,但是两者的根本是不同的,rownum是根据sql查询出的结果给每行分配一个逻辑编号,所以你的sql不同也就会导致最终rownum不同,但是rowid是物理结构上的,在每条记录insert到数据库中时,都会有一个唯一的物理记录 ,
例如  AAAMgzAAEAAAAAgAAB 7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30
这里的AAAMgzAAEAAAAAgAAB物理位置对应了这条记录,这个记录是不会随着sql的改变而改变。
因此,这就导致了他们的使用场景不同了,通常在sql分页时或是查找某一范围内的记录时,我们会使用rownum。
1、rownum
例如:
查找2到10范围内的记录(这里包括2和10的记录)
select *
  from (select rownum rn, a.* from emp a) t
where t.rn between 2 and 10;

查找前三名的记录
select * from emp a where rownum < 3;这里我们要注意,直接用rownum查找的范围必须要包含1;因为rownum是从1开始记录的,当然你可以把rownum查出来后放在一个虚表中作为这个虚表的字段再根据条件查询。
例如:
select *
  from (select rownum rn, a.* from emp a) t
where t.rn > 2;这就可以了

2、rowid
我们在处理一张表中重复记录时经常用到他,当然你也可以用一个很原始的方法,就是将有重复记录的表中的数据导到另外一张表中,最后再倒回去。
SQL>create table stu_tmp as select distinct* from stu;
SQL>truncate table sut;        //清空表记录
SQL>insert into stu select * from stu_tmp;    //将临时表中的数据添加回原表但是要是stu的表数据是百万级或是更大的千万级的,那这样的方法显然是不明智的,因此我们可以根据rowid来处理,rowid具有唯一性,查询时效率是很高的,
例如,学生表中的姓名会有重复的情况,但是学生的学号是不会重复的,如果我们要删除学生表中姓名重复只留学号最大的学生的记录,怎么办呢?
delete from stu a
    where rowid not  in (select max(rowid)
                          from stu b
                         where a.name = b.name
                           and a.stno < b.stno);
这样就可以了。
个人理解,不妥之处请跟帖指正!谢谢
分享到:
评论
1 楼 Aillen0209 2013-04-25  
学习了,谢谢啦

相关推荐

    oracle与db2对比

    Oracle 和 DB2 是两种广泛应用的关系型数据库管理系统,...使用 `&lt;sql apply-to="oracle"&gt;&lt;/sql&gt;` 和 `&lt;sql apply-to="db2"&gt;&lt;/sql&gt;` 标签可以帮助区分针对不同数据库的特定代码段,确保代码能够在目标平台上正确运行。

    oracle伪列以与伪表.doc

    Oracle数据库系统中,伪列和伪表是其特有的概念,用于增强数据库的功能和操作灵活性。伪列不是用户在创建表时定义的列,而是Oracle系统自动生成的特殊列,它们提供了额外的信息或功能。以下是关于Oracle伪列和伪表的...

    Sqlserver、Oracle、MySql、PostgreSql、SqlLite数据库差异

    - 实现方式略有不同,例如在 Sqlserver 中可以使用 `IDENTITY` 关键字,在 Oracle 中则使用序列(`SEQUENCE`)。 - **表名规范**: - 各数据库在命名规则上略有不同,但普遍推荐使用有意义的英文单词或短语,并遵循...

    Oracle课程目录

    - **scott用户**:介绍scott用户在Oracle中的默认表结构,包括`EMP`, `DEPT`, `SALGRADE`等表的字段和用途。 - **表结构分析**:详细解析每个表的字段含义及其相互之间的关联关系。 - **示例查询**:给出基于scott...

    30个Oracle语句优化规则详解

    Oracle数据库的优化是提高系统性能的关键,涉及到查询速度、资源利用率和整体系统效率。本文将详细探讨30个Oracle语句优化规则,旨在帮助...理解这些规则并将其应用于实践中,可以显著提升Oracle数据库的性能和效率。

    oracle资料

    - **伪列**:介绍了Oracle中的伪列,如ROWID和ROWNUM。 - **伪表**:解释了伪表的用途和示例。 10. **使用SQL Worksheet工作** - **SQL Worksheet**:说明了如何使用SQL Worksheet工具进行数据查询和管理。 ###...

    Oracle 开发DBA SQL编写规范

    本文档旨在为Oracle数据库开发者提供一套标准化的SQL及PL/SQL编写指南,通过规范化SQL及PL/SQL的编写方式,提高代码的可读性、可维护性和执行效率。本规范适用于所有使用Oracle数据库进行开发的项目。 #### 2. SQL...

    oracle命令

    - **分号的作用**:在Oracle中,“;”并不是SQL语句的一部分,而是用来标识多条SQL语句的结束。例如: ```sql SELECT * FROM table1; SELECT * FROM table2; ``` - **通配符“*”**:使用“*”表示选择所有字段...

    oracle实验三.docx

    ### 十四、默认时,SELECT语句会按照向表中插入行数据时的次序(即伪列rowid的大小)来显示查询结果集中的行顺序分配一个编号rownum - **SQL语句**:`SELECT rownum, * FROM emp;` - **知识点**: - `rownum` 是 ...

    java面试宝典

    26. **Oracle数据库**:理解rownum和rowid的区别,以及分页查询的方法。 27. **执行计划分析**:学习如何阅读和分析Oracle的执行计划,以提高查询效率。 28. **JVM内存管理**:探讨垃圾回收的原理和线程优先级,...

Global site tag (gtag.js) - Google Analytics