rownum 是伪列,rownum表示oracle查询结果集的数据顺序,可以使用rownum限制查询返回数据的条数。例如:
SELECT * FROM employees WHERE ROWNUM < 10;
如果在order by查询条件后跟有rownum查询条件,行号将会根据order by查询条件重新排序。数据会根据被访问数据的顺序进行改变。比如,如果order by条件让oracle使用索引访问数据,那么相比较于不使用索引,roacle会返回不同顺序的行数据。因此,下列的查询条件返回的数据与第一个表达式有所不同。
SELECT * FROM employees WHERE ROWNUM < 11 ORDER BY last_name;
如果嵌入order by 作为子查询并且在设置rownum条件查询Top N,就可以在排序之后的数据中强制rownum条件被应用,例如,返回最小的10个员工号:
SELECT * FROM
(SELECT * FROM employees ORDER BY employee_id)
WHERE ROWNUM < 11;
满足rownum大于正整数的条件总是为false,例如下列查询将不会返回任何数据:
SELECT * FROM employees
WHERE ROWNUM > 1;
获取第一行数据并将第一行的rownum标记为1,返回false,获取第二行数据将rownum标记为1,返回false,以此类推,没有满足条件的数据,因此不会返回任何数据集。