关于oracle的rownum

  • oracle的rownum是个虚列,标示查询结果的显示顺序。如以下语句的查询结果的第一行rownum=1,第二行rownum=2,以此类推。

SELECT * , ROWNUM FROM employees WHERE ROWNUM < 10;

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

  • rownum跟order by子句结合使用

查询结果的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;

  • 查询条件rownum大于任何正数,则此查询条件永远是FALSE,即查询得到的结果集将是空。原因是在查询的结果集中,oracle将取得的第一行rownum设置为1,因为不符合查询条件,则被丢弃,oracle去抓取第二行,且其rownum仍为1,同样因为不符合条件被丢弃,接着去抓取第三行,将rownum设置为1,继续丢弃,如此类推,因此以下语句会返回空集:

SELECT * FROM employees
WHERE ROWNUM > 1;

  • 我们可以使用以下语句将rownum设置为同样的值

UPDATE my_table
SET column1 = ROWNUM;

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • oracle 数据库 java编写一个程序 数据存在哪里呢?目前: 数组 集合文本文件一、数据的存储文本文件存...
    哈哈海阅读 527评论 0 4
  • 2017/3/14 RDBMS:关系型数据库管理系统 关系模型独立于语言 SQL有几种不同类型的语言:数据定义语言...
    ancherl阅读 1,658评论 0 6
  • 关系型数据库和SQL SQL语言的三个部分DML:Data Manipulation Language,数据操纵语...
    Awey阅读 1,972评论 0 13
  • 墙上的闹钟在滴滴答答的响着,琉璃了我的视线,呆呆的凝眸,回忆走过的斑驳岁月,时间的漩涡不停的旋转,日子残蚀弹指间,...
    倚栏吹凉风阅读 289评论 0 2
  • 21号完成情况: 1. catia视频1h get 2.ppt2h get 3.看书15m get 4. 英语听力...
    郑艺_22e6阅读 190评论 0 0