实现以下查询:
(1)获取前两条的记录;
(2)获取第三条到第六条的记录;
表 student ,记录数8条
(1)获取前两条的记录
直接生成
select * from student where rownum<3
也可以使用嵌套 方法1:先将rownum生成
select *
from (select rownum as rn,s.* from student_kw s where rownum>=1)
where rn <3
方法二:in 嵌套
select * from student
where s# in (select s# from student where rownum<3)
(2)获取第三条到第六条的记录
嵌套语句 方法一:
先将rownum 生成(select rownum as rn,s.* from student s where rownum>=1),再进行选择。
select *
from (select rownum as rn,s.* from student s where rownum>=1)
where rn >2 and rn<7
方法二:
两层限制,但需要注意的是,第二次的rownum是在第一次rownum生成之后的结果集的基础上再次限制,所以记录数是有所变化的。例如本例中原始数据记录是8条,第一次rownum<3后去除了2条,只剩下了7条,所以要取3-6的记录,此时第三在选择时序号已经变成了1,所以rownum应该是>5,而不是7,要相应减2。
select * from student
where s# not in (select s# from student where rownum<3)
and rownum<5
以此类推,获取其他记录时,也是用前面所提到的方法就可以解决。
总结:
(1)rownum在是在符合条件的结果集后加的一个序列号。
(2)序列号每次从1开始,所以1是不能被抛弃的。所以在你施加条件取数据的时候条件必须包含1。
所以当条件为rownum>数值时,是没有结果的。因为当它选择的时候,数据第一条的值为1,当这条不符合时,下一条就变成了1,
以此类推,导致虽然不会报错,但是找不到结果。
(3)在需要中间数据记录或者后面数据记录的时候,需要用嵌套写法。