不解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条记录。不解,谁给个解释.... --------------------编程问答-------------------- 还没人回答了 --------------------编程问答--------------------
第二种应该是这样吧:
--------------------编程问答-------------------- 子查询不一样啊 --------------------编程问答--------------------
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的条件 --------------------编程问答--------------------
我就是运行了才问嘛
我想要的是两个相同的效果 --------------------编程问答--------------------
我又疏忽了 --------------------编程问答--------------------
--------------------编程问答-------------------- 相同的二楼不是指出了吗? --------------------编程问答--------------------
--第一条子查询中出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;
怎么是筛选掉<1的记录,。。。越看我怎么越迷糊了 --------------------编程问答-------------------- 条件不一样
结果当然不一样 --------------------编程问答--------------------
我的错、是小于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楼和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 开发