博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle 限定返回的结果集 -- ROWNUM
阅读量:4051 次
发布时间:2019-05-25

本文共 938 字,大约阅读时间需要 3 分钟。

-- Start

首先,我们准备一下测试数据。

CREATE TABLE TEST(  NAME VARCHAR2(20),  BIRTHDAY DATE);INSERT INTO TEST VALUES ('张三', DATE '2014-12-14');INSERT INTO TEST VALUES ('李四', DATE '2013-12-14');INSERT INTO TEST VALUES ('王五', DATE '2012-12-14');INSERT INTO TEST VALUES ('赵六', DATE '2011-12-14');

Oracle 在查询数据的时候会为每一行赋一个行号,这个行号会存储在一个叫做 ROWNUM 伪列中,我们可以通过这个伪列来限定返回的结果集。下面的 SQL 返回两条数据。

SELECT * FROM TEST WHERE ROWNUM < 3;

值得注意的是 Oracle 并不是先查询数据,后赋行号,而是查到一条赋一条,为什么这么说呢?下面让我们查询一下年龄最大的两个人是谁?

SELECT * FROM TEST WHERE ROWNUM <= 2 ORDER BY BIRTHDAY;结果如下:NAME   BIRTHDAY李四   14-12月-13张三   14-12月-14

很明显,这不是我们想要的结果,它是先返回两条数据,后对这两条数据排序。那这个 SQL 应该怎么写呢?答案是子查询。

SELECT * FROM (SELECT * FROM TEST ORDER BY BIRTHDAY) WHERE ROWNUM <= 2;结果如下:NAME   BIRTHDAY赵六	14-12月-11王五	14-12月-12
到此为止你应该对 ROWNUM 有一定的了解了吧,那么下面这个 SQL 返回什么样的数据呢?我保证答案超乎你的想象。

SELECT * FROM TEST WHERE ROWNUM > 1;

-- 更多参见:

-- 声明:转载请注明出处

-- Last Edited on 2015-06-23

-- Created by ShangBo on 2014-12-14

-- End

你可能感兴趣的文章
01Java基础语法-16. while循环结构
查看>>
01Java基础语法-18. 各种循环语句的区别和应用场景
查看>>
01Java基础语法-19. 循环跳转控制语句
查看>>
Django框架全面讲解 -- Form
查看>>
socket,accept函数解析
查看>>
今日互联网关注(写在清明节后):每天都有值得关注的大变化
查看>>
”舍得“大法:把自己的优点当缺点倒出去
查看>>
[今日关注]鼓吹“互联网泡沫,到底为了什么”
查看>>
[互联网学习]如何提高网站的GooglePR值
查看>>
[关注大学生]求职不可不知——怎样的大学生不受欢迎
查看>>
[关注大学生]读“贫困大学生的自白”
查看>>
[互联网关注]李开复教大学生回答如何学好编程
查看>>
[关注大学生]李开复给中国计算机系大学生的7点建议
查看>>
[茶余饭后]10大毕业生必听得歌曲
查看>>
gdb调试命令的三种调试方式和简单命令介绍
查看>>
C++程序员的几种境界
查看>>
VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
查看>>
VUE-Vue.js之$refs,父组件访问、修改子组件中 的数据
查看>>
Vue-子组件改变父级组件的信息
查看>>
Python自动化之pytest常用插件
查看>>