发布日期:2023-03-31来源:武汉北大青鸟武汉校区作者:武汉宏鹏
分页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语句,建议更多的使用别名,减少数据库的解析时间。
武汉北大青鸟光谷校区报名热线:17740513250。
Copyright (c) 2006-2023 武汉宏鹏教育咨询有限公司 版权所有 All Rights Reserved.