Oracle rownum和rowid和dual

DUAL:一行一列 用来查询系统信息-当前时间、用户信息等

select to_char(sysdate,'yyyy-mm-dd hh24:mm:ss') 当前系统时间,user 当前系统用户,rownum,rowidtochar(rowid) from dual

这里写图片描述

ROWNUM:动态存在的伪列,给sql查询结果排序,会根据查询结果不同而变化的,

ROWID:Oracle中每一行数据在内存中物理地址,使用基于64位编码的18个字符来唯一标识一条记录物理位置的一个ID,其值并未存储在表中,不支持增删改操作。
rownum:主要用来实现分页查询
必须现有查询结果集,然后给结果动态加上一个排序列rownum,Oracle生成查询结果时,首先产生rownum=1一条记录,所以可以where rownum < n查询,而where rownum >n 查询不到结果,因为where条件不满足都给过滤掉了

这里写图片描述

select rowid, id,job,parent_id from pandac where rownum <5

这里写图片描述
rowid:主要用来实现去重
eg:

select *from pandab

这里写图片描述

--创建c表赋值b表所有数据
create table pandac as select *from pandab
--再向c表插入b表数据
insert into pandac select * from pandab
--查询c表此时数据
select *from pandac

这里写图片描述
显然有重复数据,但是它们在内存中的物理位置是不同的,

--用rowid去重  按主键分组,去掉同意id下重复数据,只留物理地址最小的一行数据
delete from pandac where rowid not in (select min(rowid) from pandac group by id)

bingo:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/fightingitpanda/article/details/79893506