现在的高级程序员都喜欢用命令行的方式写代码。。。
你外层加的关键字rownum 相当于又使用了伪劣而不是普通列 肯定又不能用> >=符号了啊
select e2.r,empno,ename,sal
from (select rownum r,empno,ename,sal
from (select empno,ename,sal from emp order by sal desc ) e1
where rownum<=8) e2
where e2.r >4
怎么可能
按照题目要求是工资降序排列,取的范围是第5-8条,e1表的行号就是e2表的第一列但不是e2的行号.序列号>5也就没问题.
你说的对,最内层的e1表不需要rownum列
不会混乱,rownum是伪列,不是真实的数据
这里会自动列成1.2.3.4这样的递增,
老师讲课中有提到这一点
使用管理员的身份运行命令行
结果并不正确啊 这样并没有排序
R本质还是行号伪列,只不过在第二层的查询中,将它重命名了,避免列名重名,你可以理解为将行号伪列转换成了普通列,以便于第三层的where中使用 > 条件。(ROWNUM伪列不能使用>)
其实最内侧的查询,用不到ROWNUM,
SELECT * FROM(SELECT ROWNUM 行号列,e.* FROM (SELECT empno,ename,sal FROM emp ORDER BY sal DESC) e WHERE ROWNUM<=8) WHERE 行号列>4;
可以得到相同的查询结果。其实少一个ROWNUM伪列更容易理解。
这个分页有点难,听不懂的感觉