看网上有人说查询语句执行完成之前的最后一步会生成rownum,但是order by语句得到的结果的rownum却不是按照顺序的,比如
SQL> select rownum,empno,ename from scott.emp order by sal; ROWNUM EMPNO ENAME
---------- ----- ----------
1 7369 SMITH
12 7900 JAMES
11 7876 ADAMS
3 7521 WARD
说明rownum是在order by之前生成的,而且rownum是不是就是插入记录时的顺序呢?
SQL> select rownum,empno,ename from scott.emp order by sal; ROWNUM EMPNO ENAME
---------- ----- ----------
1 7369 SMITH
12 7900 JAMES
11 7876 ADAMS
3 7521 WARD
说明rownum是在order by之前生成的,而且rownum是不是就是插入记录时的顺序呢?
在数据库解析完查询语句之后,并且在查询语句做任何的排序或者聚合之前,ROWNUM被赋值。
A ROWNUM value is assigned to a row after it passes the predicate phase of the query but before the query does any sorting or aggregation. Also, a ROWNUM value is incremented only after it is assigned.
对于每个查询返回的行,ROWNUM都会返回一个数值来表明每一行在表或连接查询结果集中的位置。
第1行ROWNUM返回1,第2行返回2,以次类推。行被选择的顺序取决于使用的索引和连接的顺序。如果指定了ORDER BY子句,ROWNUM是在排序之前赋值。ORDER BY 子句的出现,可能会改变使用的索引和连接的顺序。如果选择的行的顺序改变了,与每行相关系的ROWNUM的值也会跟着改变。