SQL取m到n条数据;数据库分页

 /*取表中5--8条数据*/
SELECT TOP 4 EmployeeID FROM dbo.Employees WHERE EmployeeID NOT IN(
SELECT TOP 4 EmployeeID FROM dbo.Employees Order  BY EmployeeID ASC)

SELECT TOP 4 EmployeeID FROM
(SELECT TOP 8 EmployeeID FROM dbo.Employees ORDER BY EmployeeID ASC) a
ORDER BY EmployeeID DESC

--IDENTITY(INT)是在临时表上面添加一列用于标示原来的非连续的记录
--这种情况是原来的表中没有IDENTITY列
SELECT IDENTITY(INT) id0,* INTO #tmp1 FROM yo
SELECT * FROM #tmp1 WHERE id0>=5 AND id0<=8

--identitycol是一个关键字
SELECT * FROM yo WHERE identitycol BETWEEN 5 AND 8

--利用差集
SELECT TOP 8 * FROM yo
EXCEPT
SELECT TOP 4 * FROM yo

--数据库分页
DECLARE @pageSize INT
DECLARE @pageIndex INT
SET @pageSize=4
SET @pageIndex=2
SELECT TOP (@pageSize) yoID FROM yo WHERE yoID NOT IN
(SELECT TOP (@pageSize*(@pageIndex-1)) yoID FROM yo ORDER BY yoID)
ORDER BY yoID

DECLARE @pageSize INT
DECLARE @pageIndex INT
SET @pageSize=4
SET @pageIndex=2
SELECT TOP (@pageSize) yoID FROM yo
WHERE yoID >
(SELECT ISNULL(MAX(yoID),0) FROM
(SELECT TOP (@pageSize*(@pageIndex-1)) yoID FROM yo ORDER BY yoID) a ) ORDER BY yoID

--08/05平台上使用;另一个排序的是rank() over 是一个跳跃排序
--这样的程序在面对数据量大的情况下可以使用
DECLARE @pageSize INT
DECLARE @pageIndex INT
SET @pageSize=4
SET @pageIndex=2
SELECT TOP (@pageSize) * FROM
(SELECT ROW_NUMBER() OVER (ORDER BY yoID) AS RowNumber,* FROM yo) a
WHERE RowNumber>(@pageSize*(@pageIndex-1))

DECLARE @pageSize INT
DECLARE @pageIndex INT
SET @pageSize=4
SET @pageIndex=2
SELECT * FROM
(SELECT ROW_NUMBER() OVER (ORDER BY yoID) AS rownum,* FROM yo) AS y
WHERE rownum BETWEEN  (@pageSize*(@pageIndex-1))+1 AND (@pageSize*@pageIndex) 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值