一、伪列的定义
可以理解为一种伪装起来、不容易看到的字段,除非特意查询,否则不会有所显现。
与一般字段最明显的区别:一般字段可以通过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;1
2
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) ;1
2
3
4
5
3 注意点
1 伪列前不要加T.
2 不要将ROWNUM用在GROUP BY和HAVING中
三、ROWID
类似于房间号,每一条数据存入到数据库中时,ORACLE都会为其自动生成一条固定不变的、唯一的18位字符串,用以记录该条数据在数据库中的物理位置。
SELECT T.*,ROWID FROM EMP T WHERE DEPTNO = 10;1
ROWID可以精确去除重复数据中的一条
--尝试删掉多余数据仅保留一条 重复数据比较少 太多就不适合用这个删除
SELECT T.*,ROWID FROM CLS74 T;
DELETE FROM CLS74 WHERE ROWID <> 'AAASSbAAEAAAAIsAAD' AND SNO = 4;1
2
3
1 在数据库中,直接查询目标数据的ROWID,是查询数据最快、最准确的方法,但一般不用。
2 不允许手动修改ROWID
3 在数据库中不重复
文章来源: blog.csdn.net,作者:浅语呀,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/c727657851/article/details/115007942