如果rownum与order by子句处理同一层次上,则rownum先于order by 子句执行。如: select rownum,empno,ename from emp order by empno; 这条SQL语句是先执行rownum,再执行order by 子句的。但如果rownum与order by 子句不在同一层次上,则按SQL语句的执行顺序执行。
SQL> select rownum,empno,ename from scott.emp order by ename; ROWNUM EMPNO ENAME ---------- ---------- ---------- 11 7876 ADAMS 2 7499 ALLEN 6 7698 BLAKE 7 7782 CLARK 13 7902 FORD 12 7900 JAMES 4 7566 JONES 9 7839 KING 5 7654 MARTIN 14 7934 MILLER 8 7788 SCOTT 1 7369 SMITH 10 7844 TURNER 3 7521 WARD说明了什么呢,不明白,这样rownum不就没用了
rownum先于order by 执行,如果想rownum和order by一致,应该用inline view 如 select rownum,empno,ename from( select empno,ename from scott.emp order by ename);
这条SQL语句是先执行rownum,再执行order by 子句的。但如果rownum与order by 子句不在同一层次上,则按SQL语句的执行顺序执行。
---------- ---------- ----------
11 7876 ADAMS
2 7499 ALLEN
6 7698 BLAKE
7 7782 CLARK
13 7902 FORD
12 7900 JAMES
4 7566 JONES
9 7839 KING
5 7654 MARTIN
14 7934 MILLER
8 7788 SCOTT
1 7369 SMITH
10 7844 TURNER
3 7521 WARD说明了什么呢,不明白,这样rownum不就没用了
如
select rownum,empno,ename from(
select empno,ename from scott.emp order by ename);