使用三层嵌套正确实现Oracle分页

发表于:2010-5-17 13:24

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  原始记录:

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

  Oracle分页查询:

  第一种:两层嵌套查询(网上流行的一种错误)

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>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号