原始记录:
select t.*, t.rowid from t_stu t
order by t.s_birthday desc
返回:
STU_ID S_NAME C_ID S_BIRTHDAY
S0002 李四 C01 1989-3-21
S0036 张36 C02 1983-8-10
S0035 张35 C02 1983-8-9
S0034 张34 C02 1983-8-8
S0033 张33 C02 1983-8-7
第一种:两层嵌套查询(网上流行的一种错误)
select * from
(
select rownum r,t.* from t_stu t
)
where r between 1 and 3 order by s_birthday desc
返回:
R STU_ID S_NAME C_ID S_BIRTHDAY
2 S0002 李四 C01 1989-3-21
3 S0003 张三丰 C02 1983-7-9
1 S0001 张三 C01 1980-1-13
说明:上面的结果可能与你的不一样,因为Oracle在没有order by的情况,是随机选取记录的。前3名的记录应该是:
STU_ID S_NAME C_ID S_BIRTHDAY
S0002 李四 C01 1989-3-21
S0036 张36 C02 1983-8-10
S0035 张35 C02 1983-8-9
第二种:换用三层嵌套查询:
select b.* from
(select rownum r,a.* from
(select t.* from t_stu t order by s_birthday desc )a
)b
where b.r between 1 and 3
返回:
R STU_ID S_NAME C_ID S_BIRTHDAY
1 S0002 李四 C01 1989-3-21
2 S0036 张36 C02 1983-8-10
3 S0035 张35 C02 1983-8-9
正确!
所以Oracle分布查询一定要用三层嵌套,步骤如下:
31/3123>