ROWNUM ROW_NUMBER() 都是oracle中获取系统顺序分配为从查询返回的行的编号的,返回的第一行分配的是1,第二行是2,依此类推。

ROWNUM 是一个伪列,用来为查询结果中的每一行分配一个唯一的、递增的行号。 她返回的行号是按照查询结果的顺序分配的,而不依赖于特定的排序。它是在从数据库中提取数据时计算的,并且会在查询返回结果时就分配给每一行。

  • 如果在没有使用ORDER BY的情况下使用 ROWNUM查询数据,返回的行号是根据数据在数据库中的物理存储顺序自动分配的。
  • 如果使用 ROWNUM ORDER BY 结合使用,ROWNUM 只会按查询返回的顺序分配行号,而不是按排序的结果分配。

ROW_NUMBER() 是一个窗口函数,它根据指定的排序规则为查询结果集中的每一行分配一个唯一的、递增的行号。 返回的行号是按照指定的排序顺序生成的。它是在结果集返回之前计算的,并且是基于 ORDER BY 子句中指定的排序规则分配的。

  • ROW_NUMBER() 会根据 ORDER BY 子句明确指定的列来分配行号,因此行号的顺序严格按照 ORDER BY 的顺序来。

如果需要使用 ROWNUM ORDER BY 配合,通常会遇到想要从一个有排序的结果中选取前 N 行的需求,正确的写法通常需要使用子查询:

SELECT * FROM (
SELECT employee_name, salary
FROM employees
ORDER BY salary DESC
)
WHERE ROWNUM <= 10;

ROW_NUMBER() 允许你根据排序规则分配唯一的行号。如果需要按照某个特定的规则来分配行号或者进行分组并排序,ROW_NUMBER() 也是更合适的选择。