ORACLE数据库(五)-----伪列

一、伪列的定义

可以理解为一种伪装起来、不容易看到的字段,除非特意查询,否则不会有所显现。
与一般字段最明显的区别:一般字段可以通过SELECT * 查到,查看某张表的表结构时也能查到,而伪列需要特定的查询才可以看到,表结构中也不会有所显示

二、ROWNUM

ROWNUM是对查询结果自动生成的一个从1开始的、连续的(自然数)序号,它会随着查询步骤的进行而不断发生变化,直到[SELECT]子句执行结束

1 序号生成时间

ROWNUM是从FROM开始生成到SELECT停止变化(在第一篇中有写到SQL语句执行顺序)

SELECT T.*,ROWNUM FROM EMP T WHERE T.DEPTNO = 20;
SELECT T.*,ROWNUM FROM EMP T WHERE T.DEPTNO = 20 ORDER BY SAL DESC;

在这里插入图片描述
在这里插入图片描述

2 ROWNUM在WHERE中的使用限制

ROWNUM < N — N > 1
ROWNUM <= N — N > 0
ROWNUM <> N – N <> 1
ROWNUM = N – N = 1
ROWNUM > N – N < 1
ROWNUM >= N – N <= 1
ROWNUM BETWEEN N1 AND N2 – N1 <= 1 N2 >= 1 / N1 <= 1<= N2

查询范围内至少包含第1个才能有数据

查询员工工资排在第四名到倒数第四名的员工

SELECT *
  FROM (SELECT A.*,ROWNUM RN FROM (SELECT * FROM EMP T ORDER BY SAL DESC) A) B
 WHERE B.RN BETWEEN 4 AND (SELECT COUNT(1)-3 FROM EMP) ;

3 注意点

1 伪列前不要加T.

2 不要将ROWNUM用在GROUP BY和HAVING中

三、ROWID

类似于房间号,每一条数据存入到数据库中时,ORACLE都会为其自动生成一条固定不变的、唯一的18位字符串,用以记录该条数据在数据库中的物理位置。

SELECT T.*,ROWID FROM EMP T WHERE DEPTNO = 10;

结果

  • ROWID可以精确去除重复数据中的一条
--尝试删掉多余数据仅保留一条   重复数据比较少 太多就不适合用这个删除
SELECT T.*,ROWID FROM CLS74 T;
DELETE FROM CLS74 WHERE ROWID <> 'AAASSbAAEAAAAIsAAD' AND SNO = 4;

1 在数据库中,直接查询目标数据的ROWID,是查询数据最快、最准确的方法,但一般不用。

2 不允许手动修改ROWID

3 在数据库中不重复

猜你喜欢

转载自blog.csdn.net/c727657851/article/details/115007942