求助:Oracle分页的小问题

whut_lcy 2006-09-28 03:27:47
问大家一个oracle数据库分页的问题:
假设有个table CLIENTS :
NAME, PASSWORD, LAST_LOGIN_DATE
a1 b 2006-9-1
a2 b 2005-8-1
a3 b 2004-4-11
a4 b 2002-12-11
a5 b 2006-9-18
a6 b 2006-9-21
a7 b 2006-9-24
a8 b 2006-9-27
a9 b 2006-9-12
a10 b 2006-9-13
..............................
在写SQL的时候,我写了两条不同的语句:
select * from (select c.*,rownum r from CLIENTS c) where r between 2 and 8 and LAST_LOGIN_DATE between to_date('2006-8-1','yy-mm-dd')
and to_date('2006-9-30','yy-mm-dd')

select * from (select c.*,rownum r from CLIENTS c where LAST_LOGIN_DATE between to_date('2006-8-1','yy-mm-dd')
and to_date('2006-9-30','yy-mm-dd')) where r between 2 and 8

自我感觉两次的结果集应该是一样的,但执行SQL后发现并非如此,不知为何
望大家给个详细的解释,并告知哪条语句是正确的,辛苦大家啦
...全文
166 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
whut_lcy 2006-09-28
  • 打赏
  • 举报
回复
谢谢各位,我的本意是要从数据库中搜出最后登陆时间在2006-8-1到2006-9-30期间登陆的人,并加入分页技术
Eric_1999 2006-09-28
  • 打赏
  • 举报
回复
第一个快点。
lone_zz 2006-09-28
  • 打赏
  • 举报
回复
select * from (select c.*,rownum r from CLIENTS c) where r between 2 and 8 and LAST_LOGIN_DATE between to_date('2006-8-1','yy-mm-dd')
and to_date('2006-9-30','yy-mm-dd')
这个中的rownum 是针对select c.*,rownum r from CLIENTS c这个结果集的,也就是说先对整个表进行rownum选择,然后对选择的结果进行 LAST_LOGIN_DATE的过滤

第二种情况rownum 是针对select c.*,rownum r from CLIENTS c where LAST_LOGIN_DATE between to_date('2006-8-1','yy-mm-dd')
and to_date('2006-9-30','yy-mm-dd'))这个结果集的
也就是说先对结果进行LAST_LOGIN_DATE的过滤。然后在rownum操作。

我不知道你的本意是什么,所以没有办法告诉你要的哪个正确
whut_lcy 2006-09-28
  • 打赏
  • 举报
回复
可否对这两条语句解释一下
zenghongmei 2006-09-28
  • 打赏
  • 举报
回复
用第二个

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧