select top 10 * from vendor where id not in (select top 20 * id from vendor order by id) order by id
上面这句是查询表的第三页,每页10条记录。但是用嵌套查询的效率很低,这点在数据多的时候可以证实。
还有一种分页方法是获取要查询页面的最大id和最小id,然后取中间的记录。
现在我不想用以上两种方法,将上面的嵌套查询语句改成等价的连接语句之后效率也会明显提高,但我忘了应该怎么改,希望高手解答。
上面这句是查询表的第三页,每页10条记录。但是用嵌套查询的效率很低,这点在数据多的时候可以证实。
还有一种分页方法是获取要查询页面的最大id和最小id,然后取中间的记录。
现在我不想用以上两种方法,将上面的嵌套查询语句改成等价的连接语句之后效率也会明显提高,但我忘了应该怎么改,希望高手解答。
--适用于 SQL Server 2000/2005
SELECT TOP 页大小 *
FROM table1
WHERE id NOT IN
(
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
)
ORDER BY id
--方法2:
--适用于 SQL Server 2000/2005
SELECT TOP 页大小 *
FROM table1
WHERE id >
(
SELECT ISNULL(MAX(id),0)
FROM
(
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
) A
)
ORDER BY id
--方法3:
--适用于 SQL Server 2005
SELECT TOP 页大小 *
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1
) A
WHERE RowNumber > 页大小*(页数-1)
--方法四 适用于 SQL Server 2005
DECLARE @pagenum AS INT, @pagesize AS INT
SET @pagenum = 2
SET @pagesize = 3
SELECT *
FROM (SELECT ROW_NUMBER() OVER(ORDER BY newsid DESC) AS rownum,
newsid, topic, ntime, hits
FROM news) AS D
WHERE rownum BETWEEN (@pagenum-1)*@pagesize+1 AND @pagenum*@pagesize
ORDER BY newsid DESC
说明,页大小:每页的行数;页数:第几页。使用时,请把“页大小”和“页大小*(页数-1)”替换成数字。