当前位置:编程学习 > JAVA >>

不解oracle分页的两个语句

第一种:

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条记录。不解,谁给个解释.... --------------------编程问答-------------------- 还没人回答了 --------------------编程问答--------------------
引用楼主 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……

第二种应该是这样吧:


select * from (select f.*,rownum row_ from (select * from tablename) f) where row_<=12 and row_>=2;
--------------------编程问答-------------------- 子查询不一样啊 --------------------编程问答--------------------

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把上面的语句运行一下就知道了  --------------------编程问答-------------------- 第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条。 --------------------编程问答-------------------- 第一个
找出前12条记录后,再找出第二条记录后面的所有记录

第二个
一共需要找出12条记录,且需要满足内部序列(row_)是大于等于2的条件 --------------------编程问答--------------------
引用 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……

我就是运行了才问嘛
我想要的是两个相同的效果 --------------------编程问答--------------------
引用 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……

我又疏忽了 --------------------编程问答--------------------
引用 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……



--第一条子查询中出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;
--------------------编程问答-------------------- 相同的二楼不是指出了吗? --------------------编程问答--------------------
引用 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……

怎么是筛选掉<1的记录,。。。越看我怎么越迷糊了 --------------------编程问答-------------------- 条件不一样
结果当然不一样 --------------------编程问答--------------------
引用 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;……

我的错、是小于2!!! --------------------编程问答--------------------
第一条子查询中出12条记录row_筛选掉<2的一条就只有11条了 --------------------编程问答-------------------- 第一种:
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条记录; --------------------编程问答-------------------- 大致明白了 --------------------编程问答--------------------
引用 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……

9楼和15楼说的都是对地,第二条的两个条件不在一个范围内 --------------------编程问答-------------------- 这根本就是两个查询嘛:
第一种:
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;

补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,