伪列

排序,100 100 100 100 100 99 99 98
1 1 1 1 1 6/2 6/2 8/3
1 2 3 4 5 6 7 8

伪列有两个东西:ROWID ROWNUM

什么是伪列:–隐藏起来的列

ROWID:身份识别码,在数据库中为数据生成的独一无二的身份识别码;
ROWNUM:生成一列从1开始的升序的序号,并不会收到其他因素的干扰。

1
2
3
4
SELECT EMP.*,ROWID,ROWNUM FROM EMP;
SELECT * FROM EMP WHERE ROWID = 'AAAR3sAAEAAAACXAAA';
SELECT * FROM EMP WHERE ROWNUM =1;
SELECT * FROM EMP WHERE ROWNUM =2;--找不到东西

–伪列必须从1开始

1
2
3
4
5
SELECT * FROM EMP WHERE ROWNUM >=1;
SELECT * FROM EMP WHERE ROWNUM BETWEEN 2 AND 4;--找不到东西
SELECT * FROM EMP WHERE ROWNUM < 9;
SELECT ROWNUM FROM EMP ORDER BY ROWNUM DESC;
SELECT EMP.*,ROWNUM FROM EMP ORDER BY SAL;

–把他想象成一摞积木,最下面算第一个,不符合把第一个拿掉,第二个变成第一个,第一个还是不符合拿掉,第三个变为第一个,不符合拿掉,以此类推

1
SELECT * FROM (SELECT A.*,ROWNUM 排序 FROM (SELECT * FROM EMP ORDER BY SAL) A) WHERE 排序 BETWEEN 1 AND 5;

–思考什么东西运行在WHERE之前?

1
2
3
查询工资最低的五名员工信息
SELECT * FROM (SELECT A.*,ROWNUM R FROM(SELECT * FROM EMP ORDER BY SAL) A) WHERE R <6;
SELECT * FROM (SELECT * FROM EMP ORDER BY SAL) WHERE ROWNUM<6;

–ROWNUM不是固定序列,而是一个总是从1开始的可变序列
–要么用小于,要么大于等于1,不从1开始就起别名