oracle 分页和TOP的SQL的说明
在这对经常用到的一个进行分页输出或者取TOP* 的SQL进行一下说明:
大家都能看明白经常用的写法有(没有排序):
1)select * from ( select rownum rn ,a.* from tablea ) where rn < 41 and rn > 19;
2)select * from ( select rownum rn ,a.* from table a where rownum < 41 ) where rn > 19;
这两中写法,推荐第二种,两种比较而言,第二种中间加载的数据集更小,更有优势。
对于有排序的情况,必须将排序单加一层查询:
1)select * from (select * ,rownum rn from ( select a.* from service a order by ID )) where rn < 41 and rn > 19;
2)select * from (select * ,rownum rn from ( select a.* from service a order by ID ) where rownum < 41 ) where rn > 19;
虽说IO的代价很小,但是还是有一定的性能优势的。
对于取top的,可以直接用rownum进行过滤:
(无排序): select a.* from tablea where rownum <= 10;
(有排序):select* from (select * from table a order by ID ) where rownum <=10;
相关推荐
oraclemch 2020-11-06
Seandba 2020-08-16
dbasunny 2020-08-16
娜娜 2020-06-22
专注前端开发 2020-10-21
苏康申 2020-11-13
vitasfly 2020-11-12
liuyang000 2020-09-25
FellowYourHeart 2020-10-05
赵继业 2020-08-17
whyname 2020-08-16
拼命工作好好玩 2020-08-15
langyue 2020-08-15
写程序的赵童鞋 2020-08-03
Accpcjg 2020-08-02
tydldd 2020-07-30
好记忆也需烂 2020-07-28