1. SQLServer分页查询
分页查询是指将返回的数据结果分成若干页,每页显示一定数量的数据,一般用于网页中的翻页功能。SQLServer中分页查询可以使用ROW_NUMBER()函数来实现。
1.1 ROW_NUMBER()函数
ROW_NUMBER()函数用于给查询出的每一行数据赋予一个行号。它的语法如下:
ROW_NUMBER() OVER (ORDER BY expression [ASC | DESC],...)
其中expression是用于排序作为关键字的列名,[ASC | DESC]用于指定升序或降序。
1.2 分页查询示例
以下是一个SQLServer分页查询的示例,假设我们需要查询tb_test表的前10行数据:
SELECT TOP 10 *
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNum, *
FROM tb_test
) AS res
WHERE RowNum > 0
ORDER BY RowNum
上述SQL语句先使用ROW_NUMBER()函数给每行数据添加一个行号,然后在外层查询对行号进行限制,只查询前10行数据。
2. Oracle分页查询
Oracle中分页查询可以使用ROWNUM方法来实现。
2.1 ROWNUM方法
ROWNUM是Oracle中的一个伪列,它会自动给查询出的每一行数据加上一个行号。但需要注意的是,ROWNUM是在数据被查询出来后才开始赋值的,在WHERE条件语句中使用ROWNUM会导致出现不可预期的结果。
2.2 分页查询示例
以下是一个Oracle分页查询的示例,假设我们需要查询tb_test表的第11-20行数据:
SELECT *
FROM (
SELECT a.*, ROWNUM rn
FROM (
SELECT *
FROM tb_test
ORDER BY id
) a
WHERE ROWNUM <= 20
)
WHERE rn > 10;
上述SQL语句中,内部嵌套了一个子查询,先将tb_test表按照id排序,然后外层的查询限制了查询结果的行数为11-20行。
总结
无论是SQLServer还是Oracle,分页查询都是比较常用的功能之一。在使用ROWNUM或ROW_NUMBER()函数时,需要特别注意行号的赋值时机和WHERE条件语句中的限制条件,避免出现意料之外的结果。