高中生,可以选择更好的学校
热门专业

课程预订

姓名:
年龄:
学历:
电话:

QQ:

校验码:

点图更换

 

分页sql语句——武汉北大青鸟周玲老师提供

来源:武汉北大青鸟鲁广校区   发表时间:2013-09-02 09:05

与在线专业老师直接对话交流

  分页sql语句——武汉北大青鸟周玲老师提供,该内容属于北大青鸟鲁广校区中级软件工程师内容,请详阅。

        分页查询是我们经常见到的问题, 分页的目的就是控制输出结果集大小,将结果尽快的返回。关于SQL语句分页,网上也有很多,总结自己已知的分页SQL语句。

  1、MySQL数据库:

  对于MySQL数据库,可以利用select语句的 LIMITE子句,方便地实现查询结果分页。LIMIT子句可以用来限制由SELECT语句返回过来的数据数量,可以有一个参数和两个参数。当输入两个参数时,个参数指定返回的行在所有数据中的位置,从0开始,第二个参数指定多返回行数;当输入一个参数时,则这个参数指定的是多返回的行数,从0开始。例如:

  SELECT T.* FROM TABLE_NAME T LIMIT 5,10; #返回第6~15行数据

  SELECT T.* FROM TABLE_NAME T LIMIT 0,5; #返回第1~5行

  SELECT T.* FROM TABLE_NAME T LIMIT 5; #返回第1~5行

  对于表中含有大量的记录的,比如超过几百万条记录的,则应考虑采用嵌套查询的方式提高查询效率,如查询第500001开始的10条记录,常规写法为:

  SELECT T.* FROM TABLE_NAME T LIMIT 500000,10;

  若采用如下的嵌套查询语句:

  SELECT * FROM TABLE_NAME WHERE ID >=

  ( SELECT ID FROM TABLE_NAME ORDER BY ID LIMIT 500000,1 ) LIMIT 10;

  能够显著提高查询速度,但是要求在ID字段上建立了索引。

  2、Oracle 数据库:

  Oracle分页查询语句依靠 Oracle 的ROWNUM 属性,常用的有两种写法。种写法如下:

  SELECT AA.* FROM

  ( SELECT A.*, ROWNUM RN FROM

  (SELECT * FROM TABLE_NAME ) A

  WHERE ROWNUM <= 40 ) AA

  WHERE AA.RN >= 21 ;

  其中内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。在查询的第二层通过ROWNUM <= 40来控制更大值,在查询的外层通过 RN >= 21控制小值。

  第二种方式是在查询的外层控制分页的小值和更大值。查询语句如下:

  SELECT AA.* FROM

  ( SELECT A.* , ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A ) AA

  WHERE AA.RN BETWEEN 21 AND 40

  对比这两种写法,大多数的情况下,个查询的效率比第二个高得多。Oracle默认能够对种SQL语句提供较好的优化,能够在缩减查询结果数据量。

  3、SQL Server数据库:

  SQL Server数据库的分页查询有多重方式,但都包含 ORDER BY 子句。下面简述3中分页查询的SQL语句写法,都是查询从 第90000条记录开始的10条记录。

  种SQL写法,利用TOP、NOT IN 构成的复合查询SQL语句:

  SELECT TOP 10 * FROM TABLE_NAME WHERE ID NOT IN

  ( SELECT TOP 90000 ID FROM TABLE_NAME ORDER BY ID )

  ORDER BY ID;

  第二种SQL 写法,利用TOP 、MAX构成的复合查询SQL语句:

  SELECT TOP 10 * FROM TABLE_NAME WHERE ID >

  ( SELECT ISNULL( MAX(ID),0 ) FROM

  ( SELECT TOP 90000 ID FROM TABLE_NAME ORDER BY ID )

  )

  ORDER BY ID

  上面两种写法,适用于 SQL Server 2000 之后的 SQL Server 数据库。从SQL Server 2005开始,提供ROW_NUMBER() OVER函数,来对指定字段进行排序,由此产生了第三种SQL语句写法 :

  SELECT TOP 10 * FROM

  ( SELECT ROW_NUMBER() OVER (ORDER BY ID) RN , * FROM TABLE_NAME ) A

  WHERE A.RN > 90000 ;

  这种SQL语句写法从思路上与第二种相同,但是利用了SQL Server 2005 的 ROW_NUMBER() OVER函数,查询效率更高。

  上面简述了MySQL、Oracle、SQL Server三种常用数据库分页语句的写法,为了提高查询效率,还需要注意合理的建立索引。分页显示的时候,大多数要涉及到 “ORDER BY ”的排序处理,若是在非索引字段进行“ORDER BY ”操作会引起表查询,执行效率低;尽可能的在进行排序的字段上建立索引,能够显著提高查询速度。同时,对于多级嵌套的复杂SQL语句,建议更多的使用别名,减少数据库的解析时间。

         武汉北大青鸟鲁广校区报名热线:027-87808818。

  • 武汉北大青鸟鲁广校区-安卓课程介绍
  • 武汉北大青鸟鲁广校区-来校路线
  • 武汉北大青鸟鲁广校区-在线咨询

作者: 武汉北大青鸟 原载: 武汉北大青鸟鲁广校区www.027hpit.com
(版权所有,转载时必须以链接形式注明作者和原始出处及本声明)

相关文章

新闻图片

Copyright 2006-2020 版权所有 武汉宏鹏职业培训学校 鄂ICP备11007753号

鄂公网安备 42011102000420号

CacheTime:2017-09-10 11:33:35 CacheID:4489