Rownum 语句:rownum 是oracle 中的一个伪例,在表中不存在。
Rownum 是在查询到的结果集之后,再加上去的,从1开始
可以和*同用(提到这个是因为曾经有人说不能和* 同用)
例:Rownum 应用
create table prod(
id varchar2(10)primary key,
color varchar2(10),
amount number
)
insert into prod values('P001','红',124);
insert into prod values('P002','黄',34);
insert into prod values('P003','红',null);
insert into prod values('P004','蓝',890);
insert into prod values('P005','白',14);
insert into prod values('P006','红',345);
insert into prod values('P007','蓝',23);
insert into prod values('P008','绿',323);
insert into prod values('P009','紫',234);
select * from prod;
获取前3行的数据:
select * from prod
where rownum<=3
获取4-7行的数据:
如果我们这么写,得到的只能是一张空表
select * from prod
where rownum between 4 and 7
原因:
Rownum 是在查询到的结果集之后,再加上去的,从1开始
因此我们只能从1-7行里面,截取掉1-3行的数据:
如果我们这样写,会发现结果并不正确
select * from prod
where rownum<=7 and id not in (select id from prod where rownum<4)
执行结果:
原因:貌似oracle中的where语句,如果有子查询,都会先执行子查询
解决方案:
select *
from (select * from prod where rownum <= 7)
where id not in (select id from prod where rownum < 4)
强迫oracle先执行截取前7行的操作
下面是执行的结果: