读书人

oracle 分析函数的应用

发布时间: 2012-07-28 12:25:13 作者: rapoo

oracle 分析函数的使用

1.rownum与rowid

? ?rownum :行数/行号.

? ?在查询语句中之使用于<,<=

?

? ?rowid:编码/编号/唯一识别号.

? ?他是类似“AAAR8gAAEAAAAErAAK”的编号,是没有先后顺序的,也就是说他和数据入库时间没有 ? ?任何关系,打个比方:他就像磁盘、内存存储数据用的是16进制的地址一样。

?

? ?他们都是伪列,可以理解成表中的一个列只是他们并不是你创建的。同样是伪列区别是什么呢?

?

? ?rowid是你录入数据时有数据库自动为这条记录添加的唯一的18位编号是一个物理编号用于找到这条记录(顺便说一句这也是为什么数据优调的时候强调尽量使用rowid的原因),他是不会随着查询而改变的 除非在表发生移动(比如表空间变化,数据导入/导出以后),才会发生变化。

?

? ?rownum是根据sql查询后得到的结果自动加上去的,但是他却不受到sql中order by排序的影响,因为他和rowid的顺序一样是系统按照记录插入时的顺序给记录排的号(顺序的、无跳跃)。 但是如果你想让rownum和order by一样的顺序 那么可以使用子查询,形如:

?

select id,name,row_number() over (partition by name order by value) row_number,               rank() over (partition by name order by value)  rank,               DENSE_RANK() over (partition by name order by value) DENSE_RANKfrom test_20120213
?

结果:

id ? name ? row ? ? rank ? dense_rank

1a1 111

2a1 211

8a1 332

3a2 111

4a3 111

5a4 111

6a4 222

7a5 111


?


?



读书人网 >其他数据库

热点推荐