Oracle RowNum与RowId区别

RowNum

为每个查询结果的每一行返回行号

例如:

select RowNum,Sysno,OrderNUm from  orders;

返回结果:

图中RowNum即为行号,这个行号并不是固定的,而是根据每次查询的结果返回的。

例如:通过添加排序条件返回的结果也是从1开始

select RowNum,Sysno,OrderNum from  orders where orderType = 1;

RowNum在实际的开发中可以实现取出某一行的数据,比较常用的功能是分页的功能

例如:取出第1页的数据,每页显示5条数据;       

    * pageSize = 5;每页的显示行数

    * pageCurrent=1;当前页

SELECT * FROM (
  select RowNum rn,Sysno,OrderNum from  orders ord WHERE ROWNUM<=pageCurrent*pageSize ) ordTb 
WHERE ordTb.rn>(pageCurrent-1)*pageSize  ;

RowID

一个使用基于64为编码的18个字符来唯一标识一条记录物理位置的一个ID,如果有两条相同的数据,RowId可以区分两条相同数据记录。面试的时候,很多面试官会提出问题:删除数据表中重复的数据,这时候可以通过RowId来实现。

select RowId ri,name from person order by name,ri;

如图,虽然name中有相同的记录,但是RowId是不同的,ROWID包含了数据号、文件号、数据位号。

其中有个规律:较先生成的数据的RowID会较小,根据这个规律,我们可以删除重复的数据

DELETE FROM person 
WHERE ROWID NOT IN (SELECT MIN(ROWID) FROM person GROUP BY name) ;
select * from person;

重复的数据已经删除,所以可以利用RowID去进行去重

猜你喜欢

转载自blog.csdn.net/Why_n/article/details/79928695