各种常见数据库分页实现(转)
来源:互联网 发布:python多版本共存 编辑:程序博客网 时间:2024/06/05 19:01
因为数据量过大,如果一次性查询会耗用大量时间以及性能,因此对数据进行分页显示变得尤为重要,以下就列出一些常用数据库的sql分页实现。
1.MySQL实现分页
MySQL实现分页效果比较简单,只有一个limit关键字就可以解决。
SELECT 列名 FROM 表名 LIMIT start,length;
其中,start是偏移量:从第start行开始检索;length是行数:一共检索length行。start可省略。
判断是否有下一页:SELECT COUNT(*) FROM 表名;
获取数据总数,然后与start+length*2比较,若前者较大则有下一页,否则没有下一页。
2.Oralce实现分页
SELECT *
FROM (SELECT A., ROWNUM RN FROM (SELECT FROM tableName order by id) A WHERE ROWNUM <=20)
WHERE RN >= 11;
select count(*) from tableName where 条件
3.Sqlserver实现分页
sqlserver由于版本的不同,分页的实现方式也各不相同。
SQL 2000 用临时表解决,通过在临时表中增加自增列解决RowNumber。
DECLARE @Start INT
DECLARE @End INT
SELECT @Start = 14000,@End = 14050
CREATE TABLE #employees (RowNumber INT IDENTITY(1,1),
LastName VARCHAR(100),FirstName VARCHAR(100),
EmailAddress VARCHAR(100))
INSERT INTO #employees (LastName, FirstName, EmailAddress)
SELECT LastName, FirstName, EmailAddress
FROM Employee
ORDER BY LastName, FirstName, EmailAddress
SELECT LastName, FirstName, EmailAddress
FROM #employees
WHERE RowNumber > @Start AND RowNumber <= @End
DROP TABLE #employees
GO
SQL 2005/2008 由于支持了Row_Number于是通过派生表的方式解决(两个嵌套)
DECLARE @Start INT
DECLARE @End INT
SELECT @Start = 14000,@End = 14050
SELECT LastName, FirstName, EmailAddress
FROM (SELECT LastName, FirstName, EmailAddress,
ROW_NUMBER() OVER (ORDER BY LastName, FirstName, EmailAddress) AS RowNumber
FROM Employee) EmployeePage
WHERE RowNumber > @Start AND RowNumber <= @End
ORDER BY LastName, FirstName, EmailAddress
GO
SQL 2005/2008 或者用CTE的方式实现,和派生表一样,就是好看点,执行计划都一样。
DECLARE @Start INT
DECLARE @End INT
SELECT @Start = 14000,@End = 14050;
WITH EmployeePage AS
(SELECT LastName, FirstName, EmailAddress,
ROW_NUMBER() OVER (ORDER BY LastName, FirstName, EmailAddress) AS RowNumber
FROM Employee)
SELECT LastName, FirstName, EmailAddress
FROM EmployeePage
WHERE RowNumber > @Start AND RowNumber <= @End
ORDER BY LastName, FirstName, EmailAddress
GO
SQL SERVER 2012 比较给力支持了OFFSET,于是一个Select结束战斗,另外在2012里,如果前面加上TOP(50),那么执行计划就会少读很多行数据(读的精准了),提高性能。
SELECT top(50) LastName, FirstName, EmailAddress
FROM Employee
ORDER BY LastName, FirstName, EmailAddress
OFFSET 14000 ROWS
FETCH NEXT 50 ROWS ONLY;
4.DB2实现分页
Db2实现分页与SQL Server类似, 但是可以不对资料排序(起始位置从1开始)
对资料排序
select * from (
select t.*, ROW_NUMBER() OVER(ORDER BY CARD_ID asc) AS ROWNUM from CARD t ) a
where ROWNUM > 20 and ROWNUM <=30
不对资料排序
select * from (
select t.*, ROW_NUMBER() OVER() AS ROWNUM from CARD t ) a
where ROWNUM > 20 and ROWNUM <=30
以上为各种常见数据库分页语句,留存备用。
原博客:http://lafecat.iteye.com/blog/2186265
- 各种常见数据库分页实现(转)
- 常见数据库分页实现
- 各种数据库分页及Java实现
- 常见数据库的分页实现方案
- 常见数据库的分页实现方案
- 常见数据库的分页实现方案
- 各种数据库分页
- 各种数据库的分页
- 各种数据库的分页
- 各种数据库分页sql
- 各种数据库的分页
- 常见数据库查询分页
- 各种数据库的分页代码
- 各种数据库分页查询SQL
- 各种数据库的分页sql
- 各种数据库分页查询语句
- 各种数据库分页查询SQL
- 各种数据库的分页查询
- 比较字符串
- JS获取元素属性
- コンピュターグラフィックス COMPUTER GRAPHICS[FOR CG ENGINEERS]-Chapter1-0706
- MPEG音频编码实验
- ubantu的root设置
- 各种常见数据库分页实现(转)
- ubantu得远程登录问题
- Docker实践—资源隔离和限制
- Android 缓存策略LruCache和DiskLruCache学习
- ActiveRecord多态关联
- 每日英语阅读(三)
- chrome DevTools之黑箱大法(Blackbox )
- Anroid init.rc基本知识
- Barbells(三进制)