Oracle rownum原理和使用
来源:互联网 发布:verilog调用模块 数组 编辑:程序博客网 时间:2024/06/06 02:01
对于查询返回的每一行,使用rownum伪列返回一个数字,表示oracle从表中选择行或将加入行的顺序。
如果一个order by子句和rownum在同一个查询,那么行会由order by子句中重新排序,看如下例子
参考文件
选择的第一行rownum为1,第二行为2,以此类推。
可以使用rownum来限制由查询返回的行数,如下例子:
select * from test where rownum < 10;
如果一个order by子句和rownum在同一个查询,那么行会由order by子句中重新排序,看如下例子
select rownum, name, address, birthday from test where rownum < 5 order by birthday;
我们发现rownum并不是顺序的,系统是按照记录插入的时候给记录排的号,解决这个问题 需要使用子查询
select rownum, name, address, birthday from (select name, address, birthday from test order by birthday) where rownum < 5
这样就成了按birthday排序,并且用rownum标出正确序号(由小到大)
前面我们使用rownum<10查询出来了9条数据,这次我们使用rownum>1来查询一下数据
select * from test where rownum > 1;
发现该查询无返回任何数据,所以我们无法使用rownum = n 或 rownum > n(n>1的自然数)来进行查询
原因是:
第一行读取被分配为1,rownum>1使得条件为假,接着读取第二行现在变为第一行,并还分配为1
rownum使得条件依然是假,所有行随后均未能满足该条件,所以没有行被返回。
如果非要rownum大于一个正整数来查询,还得需要子查询来实现
select num, name, address, birthday from (select rownum as num, name, address, birthday from test) where num > 5;也可以使用between...and...
select num, name, address, birthday from (select rownum as num, name, address, birthday from test) where num between 5 and 10
SQL测试脚本:
create table test( name varchar2(100), address varchar2(100), birthday date);insert into test values('name1','address1',to_date('1990-04-10','yyyy-MM-dd'));insert into test values('name2','address2',to_date('1989-06-11','yyyy-MM-dd'));insert into test values('name3','address3',to_date('1991-08-23','yyyy-MM-dd'));insert into test values('name4','address4',to_date('1998-12-04','yyyy-MM-dd'));insert into test values('name5','address5',to_date('1985-07-16','yyyy-MM-dd'));insert into test values('name6','address6',to_date('1988-04-08','yyyy-MM-dd'));insert into test values('name7','address7',to_date('1992-08-26','yyyy-MM-dd'));insert into test values('name8','address8',to_date('1995-11-10','yyyy-MM-dd'));insert into test values('name9','address9',to_date('1988-03-28','yyyy-MM-dd'));insert into test values('name10','address10',to_date('1982-05-02','yyyy-MM-dd'));insert into test values('name11','address11',to_date('1991-10-19','yyyy-MM-dd'));
参考文件
https://docs.oracle.com/cd/E18283_01/server.112/e17118/pseudocolumns009.htm
作者:itmyhome
13 3
- Oracle rownum原理和使用
- oracle rownum原理和使用
- Oracle rownum原理和使用
- Oracle的rownum原理和使用
- Oracle的rownum原理和使用
- [转载]Oracle的rownum原理和使用
- Oracle的rownum原理和使用
- Oracle的rownum原理和使用
- Oracle的rownum原理和使用(转)
- Oracle的rownum原理和使用
- Oracle的rownum原理和使用
- Oracle的rownum原理和使用
- Oracle的rownum原理和使用
- Oracle的rownum原理和使用
- Oracle的rownum原理和使用
- Oracle的rownum原理和使用
- Oracle的rownum原理和使用
- Oracle的rownum原理和使用
- Flask项目集成富文本编辑器UEditor
- Asp.net配置文件中自定义节点详解
- Ubuntu桌面环境等GUI问题
- eclipse 快捷键
- 谱聚类、Chameleon聚类、PCCA、SOM、Affinity Propagation
- Oracle rownum原理和使用
- C#Windows Media Player控件基本及扩展属性
- ios求职常见问题
- Bullet(Cocos2dx)之内存泄露检测
- mysql错误1130,具体描述如下ERROR 1130 Host 'localhost' is not allowed to connect to this MySQL
- ISA Server 2006使用经验与部分疑难问题解决
- 记第一篇博客
- eclipse中把Java工程修改成web工程
- 给程序加入能打印文件名、行号、日期的日志信息,并设置debug开关