我爱编程

关于oracle的rownum

2014-07-16  本文已影响0人  F6

SELECT * , ROWNUM FROM employees WHERE ROWNUM < 10;

查询时,我们可以使用rownum来限制查询结果的数量,如上面的语句查询最多9个符合条件的雇员。

查询结果的rownum不一定按顺序显示,这很大程度上跟执行查询语句时oracle访问数据的方式有关,比如官方文档举的例子,order by子句可能会导致oracle使用索引去访问数据,那么这种方式查询并显示的rownum,跟没有使用索引去访问并显示的rownum可能有所不同:

If an ORDER BY clause follows ROWNUM in the same query, then the rows will be reordered by the ORDER BY clause. The results can vary depending on the way the rows are accessed. For example, if the ORDER BY clause causes Oracle to use an index to access the data, then Oracle may retrieve the rows in a different order than without the index

比如下面的语句查询,rownum的显示跟上面语句查询所得不一定相同:

SELECT *,ROWNUM FROM employees WHERE ROWNUM < 11 ORDER BY last_name;

如果要rownum顺序显示,则要用到子查询,先在子查询后使用order by子句排序查询结果,然后在最外层使用rownum:

SELECT * FROM
(SELECT * FROM employees ORDER BY employee_id)
WHERE ROWNUM < 11;

SELECT * FROM employees
WHERE ROWNUM > 1;

UPDATE my_table
SET column1 = ROWNUM;

参考资料:
官方文档:ROWNUM Pseudocolumn

上一篇下一篇

猜你喜欢

热点阅读