不解oracle分页的两个语句

huitailangly 2012-01-06 01:31:06
第一种:

select * from (select f.*,rownum row_ from (select * from tablename) f where rownum<=12)where row_>=2;


第二种:

select * from (select f.*,rownum row_ from (select * from tablename) f) where rownum<=12 and row_>=2;

为什么第一种出来的是11条记录。而第二种出来的是12条记录。不解,谁给个解释....
...全文
148 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
0xfather 2012-01-09
  • 打赏
  • 举报
回复
这根本就是两个查询嘛:
第一种:
select * from (select f.*,rownum row_ from (select * from tablename) f where rownum<=12)where row_>=2;
就是
先 select * from tablename f,查出结果为对象表f
再 select f.*,rownum row_ from f where rownum<=12 查出结果为对象表,假设为 X
然后再select * from x where row_>=2;

第二种:

select * from (select f.*,rownum row_ from (select * from tablename) f) where rownum<=12 and row_>=2;

就是
先select * from tablename f,查出结果为对象表f
再select f.*,rownum row_ from f,查出对象为对象表,假设为X
然后再select * from x where rownum<=12 and row_>=2;

baishi1220 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hzw2312 的回复:]
引用 7 楼 huitailangly 的回复:

引用 4 楼 hzw2312 的回复:

SQL code

select t.*,rownum from (select f.*,rownum row_ from (select * from tablename) f where rownum<=12)t where row_>=2;
select t.*,rownum from……
[/Quote]
9楼和15楼说的都是对地,第二条的两个条件不在一个范围内
huitailangly 2012-01-06
  • 打赏
  • 举报
回复
大致明白了
放纵青春 2012-01-06
  • 打赏
  • 举报
回复
第一种:
select * from (select f.*,rownum row_ from (select * from tablename) f where rownum<=12)where row_>=2;

select f.*,rownum row_ from (select * from tablename) f where rownum<=12这个子查询里面有12条记录,row_>=2这个条件选出了其中的11条记录;



第二种:
select * from (select f.*,rownum row_ from (select * from tablename) f) where rownum<=12 and row_>=2;

select f.*,rownum row_ from (select * from tablename) f这个子查询查出了表里的所有记录(当然是大于12个的),条件中的rownum<=12中的rownum和子查询中的rownum是两码事,没有关系,
条件rownum<=12 and row_>=2实际是从子查询中选出满足条件row_>=2的前12条记录;
BUG胡汉三 2012-01-06
  • 打赏
  • 举报
回复

第一条子查询中出12条记录row_筛选掉<2的一条就只有11条了
BUG胡汉三 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 huitailangly 的回复:]

引用 9 楼 hzw2312 的回复:

引用 7 楼 huitailangly 的回复:

引用 4 楼 hzw2312 的回复:

SQL code

select t.*,rownum from (select f.*,rownum row_ from (select * from tablename) f where rownum<=12)t where row_>=2;……
[/Quote]
我的错、是小于2!!!
jumpheightway 2012-01-06
  • 打赏
  • 举报
回复
条件不一样
结果当然不一样
huitailangly 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hzw2312 的回复:]

引用 7 楼 huitailangly 的回复:

引用 4 楼 hzw2312 的回复:

SQL code

select t.*,rownum from (select f.*,rownum row_ from (select * from tablename) f where rownum<=12)t where row_>=2;
select t.*,rownum fro……
[/Quote]
怎么是筛选掉<1的记录,。。。越看我怎么越迷糊了
BUG胡汉三 2012-01-06
  • 打赏
  • 举报
回复
相同的二楼不是指出了吗?
BUG胡汉三 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 huitailangly 的回复:]

引用 4 楼 hzw2312 的回复:

SQL code

select t.*,rownum from (select f.*,rownum row_ from (select * from tablename) f where rownum<=12)t where row_>=2;
select t.*,rownum from (select f.*,rownum row_ fr……
[/Quote]


--第一条子查询中出12条记录row_筛选掉<1的一条就只有一条了
select t.*,rownum from (select f.*,rownum row_ from (select * from tbsysuserinfo) f where rownum<=12)t where row_>=2;

--第二条子查询中出所有记录row_筛选掉子查询中<2的、而rownum属于 t 的、而不是 f 的、它筛选掉的是 t 中<=12并不是 f 中的。
select t.*,rownum from (select f.*,rownum row_ from (select * from tbsysuserinfo) f) t where rownum<=12 and row_>=2;
huitailangly 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lxm_yl 的回复:]

引用楼主 huitailangly 的回复:
第一种:
SQL code

select * from (select f.*,rownum row_ from (select * from tablename) f where rownum<=12)where row_>=2;



第二种:
SQL code

select * from (select f.*,row……
[/Quote]
我又疏忽了
huitailangly 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hzw2312 的回复:]

SQL code

select t.*,rownum from (select f.*,rownum row_ from (select * from tablename) f where rownum<=12)t where row_>=2;
select t.*,rownum from (select f.*,rownum row_ from (select * from tablena……
[/Quote]
我就是运行了才问嘛
我想要的是两个相同的效果
soli11722984 2012-01-06
  • 打赏
  • 举报
回复
第一个
找出前12条记录后,再找出第二条记录后面的所有记录

第二个
一共需要找出12条记录,且需要满足内部序列(row_)是大于等于2的条件
q167992461 2012-01-06
  • 打赏
  • 举报
回复
第1个是rownum <=12 是指select f.*,rownum row_查询结果的12条,总数为12,row_>=2是从这12条结果中的第2条开始,所以是11条

第2个是rownum <=12 是指select * from 的查询结果的总数是12条 row_>=2 是从select f.*,rownum row_查询结果的第2条开始数12条,所以是12条。
BUG胡汉三 2012-01-06
  • 打赏
  • 举报
回复

select t.*,rownum from (select f.*,rownum row_ from (select * from tablename) f where rownum<=12)t where row_>=2;
select t.*,rownum from (select f.*,rownum row_ from (select * from tablename) f) t where rownum<=12 and row_>=2;

rownum在作怪~~~!!!
LZ把上面的语句运行一下就知道了
暖暖猫 2012-01-06
  • 打赏
  • 举报
回复
子查询不一样啊
ascendlin 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 huitailangly 的回复:]
第一种:
SQL code

select * from (select f.*,rownum row_ from (select * from tablename) f where rownum<=12)where row_>=2;



第二种:
SQL code

select * from (select f.*,rownum row_ from (select * from t……
[/Quote]
第二种应该是这样吧:


select * from (select f.*,rownum row_ from (select * from tablename) f) where row_<=12 and row_>=2;
huitailangly 2012-01-06
  • 打赏
  • 举报
回复
还没人回答了

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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