原文地址:http://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm
对于查询返回的每一行,ROWNUM伪列返回一个指示Oracle从表或者联合中查询该行的顺序。第一个选择的行的ROWNUM为1,第二个为2,等等。
可以使用ROWNUM限制查询返回的行数,如下例所示:
SELECT * FROM employees WHERE ROWNUM < 11;
如果在同一个查询的ROWNUM之后存在ORDER BY子句,结果行将会重新排序。查询结果会依赖访问行的方式而不同。例如,如果ORDER BY导致Oracle使用索引访问数据,可能以不同的顺序返回数据行。因此,以下语句与上一个语句将会返回不同的结果:
SELECT * FROM employees WHERE ROWNUM < 11 ORDER BY last_name;
如果在子查询中嵌入ORDER BY子句并且将ROWNUM条件放在顶层查询中,可以使得ROWNUM在排序之后应用。例如,以下查询返回具有最小雇员编号的10个雇员。这种查询有时被称为top-N报表:
SELECT * FROM
(SELECT * FROM employees ORDER BY employee_id)
WHERE ROWNUM < 11;
在上例中,ROWNUM的值是顶层SELECT语句中的值,因此它们在子查询中的数据行按employee_id排序之后生成。
ROWNUM大于一个正整数的条件总是返回假。例如以下查询没有数据行返回:
SELECT * FROM employees WHERE ROWNUM > 1;
获取的第一行被赋予ROWNUM值1,因此WHERE条件为假。第二行成为了第一行,并且同样被赋予了1,条件仍然为假。随后所有的行都不能满足条件,因此没有返回行。
还可以使用ROWNUM为表的每一行指定唯一值,如下例所示:
UPDATE my_table SET column1 = ROWNUM;
也可以使用函数ROW_NUMBER为表的行指定唯一值。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24945919/viewspace-748017/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24945919/viewspace-748017/