Oracle基础知识:伪列rownum,伪列就像表中的列一样,但是在表中并不存储。伪列只能查询,不能进行增删改操作。

在查询的结果集中,ROWNUM为结果集中每一行标识一个行号,第一行返回1,第二行返回2,以此类推。通过ROWNUM伪列可以限制查询结果集中返回的行数。

ROWNUM与ROWID不同,ROWID是插入记录时生成,ROWNUM是查询数据时生成。ROWID标识的是行的物理地址。ROWNUM标识的是查询结果中的行的次序。

例题:

SELECT S.* FROM SCORE S


案例1:查询出成绩表中前5个学生的sno、cno、degree

SELECT S.*, ROWNUM FROM SCORE S WHERE ROWNUM <= 5

案例2:查询出成绩最高的前5名学生的sno、cno、degree。

“成绩最高的前5名”需要先降序排序,再取前5名,但是生成ROWNUM操作比排序要早,排序时已经连同ROWNUM一起排序了,因此不能直接在案例1的语句中直接加上Order by,而是需要对排序的结果重新做二次查询,产生新的ROWNUM才能作为查询的条件依据。

SELECT S1.*, ROWNUM
FROM (SELECT S.* FROM SCORE S ORDER BY S.DEGREE DESC) S1
WHERE ROWNUM <= 5

案例3:查询出表score中第6条到第10条之间的记录。

这是分页的应用,在查询条件中,如果查询条件中ROWNUM大于某一正整数,则不返还任何结果。

SELECT *
FROM (SELECT S.*, ROWNUM R FROM SCORE S WHERE ROWNUM <= 10)
WHERE R > 5

代码解析:

① 内部查询中得到ROWNUM 并且用别名R记录,供外层条件③使用。

② 内部查询的ROWNUM,与外出的ROWNUM列是平等的两列。

③ 使用的R是内层产生的ROWNUM,在外层看来,内层查询的ROWNUM是正常的一列。

最新文章

  1. C/C++面试题集锦(一)
  2. kubernetes Ubuntu部署
  3. Spring管理bean的生命周期
  4. c++ 字符串工具类
  5. javascript函数基础
  6. 正则表达式(javascript)学习总结
  7. 【转】CCUserDefault类深入分析&mdash;&mdash;2013-08-25 22
  8. C#调用java接口报“Fault occurred while processing”异常问题
  9. LINK : fatal error LNK1181: 无法打开输入文件“..\..\lib\Release\opencv_ocl249.lib”
  10. 顺序表----java实现
  11. 未能加载文件或程序集“file:///C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0
  12. Python基础(迭代器)
  13. C#7.0中的解构功能---Deconstruct
  14. 使用js下载文件
  15. mysql系列四、mySQL四舍五入函数用法总结
  16. Win10系列:VC++数据绑定
  17. 五、CLR加载程序集代码时,JIT编译器对性能的产生的影响
  18. libgdx学习记录23——图片移动选择
  19. 使用Netty4实现基本的消息分发
  20. composer 学习与推荐资料

热门文章

  1. 深入浅出 Cocoa 之 Core Data(1)- 框架详解
  2. C++测试题练习题1
  3. NV 3D投影方案 【转】
  4. DailyMasalaCMS升级记录
  5. java基础篇4之注解
  6. java8新特性学习笔记(二) 使用流(各种API)
  7. sql字符串处理
  8. \\s+ split替换
  9. ReactiveCocoa入门教程——第二部分【转载】
  10. 浅谈java反序列化工具ysoserial