Oracle中两个重要的数据伪列

        之前接触过SYSDATE伪列。所谓的伪列就是指列本身不存在,但是却可以进行使用的列。Oracle里面提供有两个非常重要的伪列:ROWNUM(比较重要)、ROWID。

1、行号(ROWNUM)

如果在开发之中使用了ROWNUM,那么就表示会自动地生成行号。


发现ROWNUN在每一行显示的时候都会自动增加一个行号,但是ROWNUM生成的行号不是固定的,而是动态计算得来的。


此时行号是根据查询结果动态计算出来的,所以每一个行号都不会与特定的记录捆绑。


            解释:为什么NOT IN 里面不能够有NULL。

    NOT IN(NULL) 如果某一列上的内容就没有null,那么就表示查询全部,但是NOT IN本身的作用是进行数据的部分筛选,结果由于自身的数据错误导致查询全部,那么就是灾难了。

    一般而言有经验的工程师都不会进行“SELECT * FROM 表”,都会做一个限定查询,例如:查询第一行,此时就可以使用ROWNUM来完成。例如:SELECT * FROM EMP WHERE ROWNUM=1

    对ROWNUM而言最为重要的特性是在于它可以取得前n行记录。




    在数据表的查询过程之中,ROWNUM不能够定义范围,所以此时要想正确实现所需要的功能,就必须利用子查询完成。在子查询中首先查询前10行记录,而后在查询后5行记录。(前10行记录当做一张表的话,里面的ROWNUM值就固定了)所以可以用下面的方式查:


程序中分页功能的实现就利用了以上的查询语句。

对分页而言,往往都有一个属于自己的固定语法形式,下面给出参考格式:

            ·currentpage:表示的是当前所在页

            ·pagesize:表示每页显示的数据行

select * from 
(select rownum rn,empno,ename,job from myemp
where rownum<=currentsize*pagesize)temp

where temp.rn>(currentpage-1)*pagesize;

2、行ID:ROWID

ROWID大部分情况下是针对于一些分析上使用的,而且在实际的开发过程之中,几乎也不会感受到ROWID的存在。所谓的ROWID指的是针对于每行数据提供的物理地址。

范例:查看ROWID:




范例:如下mydept表中有完全重复的数据


现在的问题是表中的数据列的信息几乎都是一样的,所以如果按照已有的字段删除,那么最终的结果都会被删除掉。那么现在即便数据重复了,那么在Oracle里面存在有一个ROWID,它的物理保存地址也是不可能重复的。

在程序之中都会设计累加的操作,所以理论上来讲,最早保存数据的ROWID应该是最小的。所有会使用到min()函数

使用如下代码来完成:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值