sql分页 Mysql Oracle SqlServer
来源:互联网 发布:火车票网络订单号查询 编辑:程序博客网 时间:2024/06/05 14:30
假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql、Oracle和SQL Server分页查询student表。
1、Mysql的分页查询:
1 SELECT2 *3 FROM4 student5 LIMIT (PageNo - 1) * PageSize,PageSize;
理解:(Limit n,m) =>从第n行开始取m条记录,n从0开始算。
2、Oracel的分页查询:
1 SELECT 2 * 3 FROM 4 ( 5 SELECT 6 ROWNUM rn ,* 7 FROM 8 student 9 WHERE10 Rownum <= pageNo * pageSize11 )12 WHERE13 rn > (pageNo - 1) * pageSize
理解:假设pageNo = 1,pageSize = 10,先从student表取出行号小于等于10的记录,然后再从这些记录取出rn大于0的记录,从而达到分页目的。ROWNUM从1开始。
3、SQL Server分页查询:
1 SELECT 2 TOP PageSize * 3 FROM 4 ( 5 SELECT 6 ROW_NUMBER () OVER (ORDER BY id ASC) RowNumber ,* 7 FROM 8 student 9 ) A10 WHERE11 A.RowNumber > (PageNo - 1) * PageSize
理解:假设pageNo = 1,pageSize = 10,先按照student表的id升序排序,rownumber作为行号,然后再取出从第1行开始的10条记录。
二,集中高效的sql语句
.几种典型的分页sql,下面例子是每页50条,198*50=9900,取第199页数据。
--写法1,not in/top
select top 50 * from pagetest
where id not in (select top 9900 id from pagetest order by id)
order by id
--写法2,not exists
select top 50 * from pagetest
where not exists
(select 1 from (select top 9900 id from pagetest order by id)a where a.id=pagetest.id)
order by id
--写法3,max/top
select top 50 * from pagetest
where id>(select max(id) from (select top 9900 id from pagetest order by id)a)
order by id
--写法4,row_number()
select top 50 * from
(select row_number()over(order by id)rownumber,* from pagetest)a
where rownumber>9900
select * from
(select row_number()over(order by id)rownumber,* from pagetest)a
where rownumber>9900 and rownumber<9951
select * from
(select row_number()over(order by id)rownumber,* from pagetest)a
where rownumber between 9901 and 9950
--写法5,在csdn上一帖子看到的,row_number() 变体,不基于已有字段产生记录序号,先按条件筛选以及排好序,再在结果集上给一常量列用于产生记录序号
select *
from (
select row_number()over(order by tempColumn)rownumber,*
from (select top 9950 tempColumn=0,* from pagetest where 1=1 order by id)a
)b
where rownumber>9900
分别在1万,10万(取1990页),100(取19900页)记录集下测试。
测试sql:
declare @begin_date datetime
declare @end_date datetime
select @begin_date = getdate()
<.....YOUR CODE.....>
select @end_date = getdate()
select datediff(ms,@begin_date,@end_date) as '毫秒'
阅读全文
0 0
- sql分页 Mysql Oracle SqlServer
- SQLserver/Oracle/MySQL数据库分页 SQL语句
- oracle mysql SqlServer 数据库分页实现sql
- oracle,sqlServer,MySQL分页
- sqlserver、mysql、oracle分页
- Oracle,mysql,sqlServer分页
- my sql分页 SQLServer分页 oracle分页
- Oracle、DB2、SQLSERVER、MySQL、Access分页SQL语句
- Oracle、DB2、SQLSERVER、Mysql、Access分页SQL语句梳理
- Oracle、DB2、SQLSERVER、Mysql、Access分页SQL语句梳理
- 数据库分页sql语句(mysql,oracle,sqlserver,DB2)
- sqlserver/mysql/oracle实现sql语句分页方法
- oracle分页-sqlserver分页-mysql分页
- MySql、SqlServer、oracle分页实现
- mysql,sqlServer,oracle分页查询
- Oracle、 Mysql 、 SQLserver 分页查询
- mysql sqlserver oracle分页语句
- sqlserver oracle mysql 分页查询
- java8 获取当天的开始时间和结束时间
- 如何撰写英文论文
- 慕课网——PHP进阶篇(会话控制:session与cookie)
- PAT1021
- PAT --- 1024. 科学计数法 (20)
- sql分页 Mysql Oracle SqlServer
- windows下eclipse通过JDBC连接hive
- ld.gold使用指南
- 修改GIT上传名以及上传邮箱
- MySQL InnoDB Cluster安装
- ActiveMQ学习(一)
- sql(join带代替in)
- Jzoj5234 外星人的路径
- 取一个数的高位、低位