ROWNUM和ROWID的认识

作者:杨裙
本次任务完成时间:2019年4月6日
开发工具与关键技术:Oracle sql*plus 、 PLSQL Developer

1、 ROWNUM:
ROWNUM它是ORACLE分页查询,ROWNUM是对结果集添加的一个伪列,即先查到结果集之后在加上去的一个伪列,一定要先有结果集,ROWNUM它是对符合条件的***,它总是从1开始进行排序。在ROWNUM语句中不能直接写在查询的语句上,因为这样查询出来的结果全部都是乱序。所以都是把ROWNUM放在子查询的外层,查询出来即可。有些子查询会存在ORDER BY 排序的写法,因为ORDER BY 无论在什么语句中其执行顺序都是最后才进行执行,所以只能让其排序,把ROWNUM放在外层,所以会比没有ORDER BY 语句的查询的运行效率较低一点。
需要注意的是:ROWNUM只能使用 < 或 <= , 而用= 、> 或 >= 都将不能返回任何数据。如果遇到要使用=、>、>=、那么只能把ROWNUM写在子查询的外面,那么就可查询出来。
如果遇到 < 或 <= 那么可以把ROWNUM放在子查询的外层,当同时存在= 、> 或 >= 可以再写一层查询,然后把where 条件放在最后一层,这样可以提高运行的效率,如图:

ROWNUM和ROWID的认识2、 ROWID:行地址
ROWID行地址(物理地址),它也是一个伪列,并不存在于实际的列表中,它是唯一的标志记录。
ROWID 它可以用来删除重复数据,只留下唯一一条数据,如果当存在很多数据的时候,用ROWID就会非常的方便。如果直接写一个删除数据的语句,那么其就会把所有重复的数据全部删除,一条数据都没有,那么这样就不是我们想要的结果。ROWID它就不会把所有重复的数据删除,它会根据它的物理地址进行排序,其数据都是唯一的,排序如图:
ROWNUM和ROWID的认识
它的排序都是不重复的,如果在子查询查询出最大或最小的那条数据,写条件的时候让其不等于子查询查询出来的结果,那么ROWID它删除时就会留下子查询查询出来的数据,同时也唯一的一条数据,如图:
ROWNUM和ROWID的认识