返回集问题

我们都知道,FETCH FIRST n ROWS ONLY是返回前n条记录,但我看到有些查询大量结果时,利用下一页来显示n+1 到n+m行数据。

比如:第一次返回0-100条数据,第二次返回101-200条数据,第三次返回201-300条数据,,,,,,,,,,,


想问下大神,这是怎么实现的?(应用层还是数据库层?)多谢!
参与7

5同行回答

匪徒易真匪徒易真数据库管理员匪徒易真
row_number() 显示全部

row_number()

收起
IT其它 · 2015-10-27
浏览1188
drdb2drdb2系统工程师se
回复 3# gggeeqg 我给的就是ULW的情形另外, 你如果想用exact mysql syntax, DB2也是可以做到的看例子[db2inst1@s1 ~]$ db2set DB2_COMPATIBILITY_VECTOR=mys[db2inst1@s1 ~]$ db2stop force09/29/2015 13:48:33     0   0   SQL1...显示全部
回复 3# gggeeqg

我给的就是ULW的情形

另外, 你如果想用exact mysql syntax, DB2也是可以做到的
看例子
[db2inst1@s1 ~]$ db2set DB2_COMPATIBILITY_VECTOR=mys
[db2inst1@s1 ~]$ db2stop force
09/29/2015 13:48:33     0   0   SQL1064N  DB2STOP processing was successful.
SQL1064N  DB2STOP processing was successful.
[db2inst1@s1 ~]$ db2start
09/29/2015 13:48:40     0   0   SQL1063N  DB2START processing was successful.
SQL1063N  DB2START processing was successful.
[db2inst1@s1 ~]$ db2 connect to sample

   Database Connection Information

Database server        = DB2/LINUXX8664 10.5.5
SQL authorization ID   = DB2INST1
Local database alias   = SAMPLE

[db2inst1@s1 ~]$ db2 "select empno from emp limit 10,2"

EMPNO
------
000130
000140

  2 record(s) selected.收起
互联网服务 · 2015-09-29
浏览1157
masalymasaly其它易诚
不了解DB2 for AS400的机制,但是开放平台的DB2可以通过fetch first n rows only + optimize for n rows的方法实现该功能。比如读取第4000条记录后的10条记录,SQL如下:select * from (select row_number() over() rn,c1,c2 from x1) where rn>4000 fetch first 10 rows only...显示全部
不了解DB2 for AS400的机制,但是开放平台的DB2可以通过fetch first n rows only + optimize for n rows的方法实现该功能。

比如读取第4000条记录后的10条记录,SQL如下:

select * from (select row_number() over() rn,c1,c2 from x1) where rn>4000 fetch first 10 rows only optimize for 10 rows

x1表即使有1000万记录,也只需要读4010条记录即可。

如果需要排序,排序字段必须有索引,比如:

select * from (select row_number() over(order by c1) rn,c1,c2 from x1) where rn>4000 fetch first 10 rows only optimize for 10 rows

C1列必须建索引收起
软件开发 · 2015-09-29
浏览1120
gggeeqggggeeqg系统运维工程师中国银行
回复 2# drdb2    我看到AS400机器就有这种功能,数据不是一次性全部查询出来的,翻到下一页或者后面的数据的时候,就会再去数据库里面查询,它这种机制是AS400特有的吗?显示全部
回复 2# drdb2


   我看到AS400机器就有这种功能,数据不是一次性全部查询出来的,翻到下一页或者后面的数据的时候,就会再去数据库里面查询,它这种机制是AS400特有的吗?收起
银行 · 2015-09-26
浏览1232
drdb2drdb2系统工程师se
传统是可以用row_number() 实现的看一个简单例子[db2inst1@s2 ~]$ db2 "select empno from (select row_number() over (order by empno) as rownum, E.* from employee E) where rownum between 10 and 12"EMPNO ------000120000130000140  3 record(s) selec...显示全部
传统是可以用
row_number()
实现的
看一个简单例子
[db2inst1@s2 ~]$ db2 "select empno from (select row_number() over (order by empno) as rownum, E.* from employee E) where rownum between 10 and 12"

EMPNO
------
000120
000130
000140

  3 record(s) selected.收起
互联网服务 · 2015-09-26
浏览1121

提问者

gggeeqg
系统运维工程师中国银行
擅长领域: 存储安全软件定义存储

相关问题

相关资料

问题状态

  • 发布时间:2015-09-25
  • 关注会员:2 人
  • 问题浏览:4144
  • 最近回答:2015-10-27
  • X社区推广