SQL Server中的限制查询

在SQL Server中,我们经常需要查询返回最前面的一部分记录,这时就需要使用限制查询。限制查询常用于控制数据结果的数量,比如只返回前n条记录或者跳过前n条记录。在SQL Server中,我们可以使用TOP和OFFSET FETCH来实现限制查询。
使用TOP关键字查找前n条记录
TOP关键字用于指定返回记录的行数。它可以和SELECT语句一起使用,示例如下:
SELECT TOP 10 * FROM TableName;
上述SQL语句表示从TableName表中查询返回前10条记录。如果要查询前20条记录,则将TOP 10改为TOP 20即可。
使用OFFSET FETCH查找指定范围记录
OFFSET和FETCH关键字一起使用时,可以查询从指定行开始的一定数量的记录。示例如下:
SELECT * FROM TableName
ORDER BY ColumnName
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;
上述SQL语句表示从TableName表中按照ColumnName列排序,跳过前10行记录,然后获取接下来的10行记录。如果要查询第11到20条记录,可以将OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY中的数字调整为合适的值。
示例
假设我们有一个名为Employees的表,结构如下:
| ID | Name | Salary |
|---|---|---|
| 1 | Alice | 5000 |
| 2 | Bob | 6000 |
| 3 | Charlie | 7000 |
| 4 | David | 5500 |
| 5 | Emma | 7500 |
| 6 | Frank | 5800 |
| 7 | Grace | 6800 |
| 8 | Henry | 7200 |
| 9 | Iris | 5900 |
| 10 | Jack | 6300 |
我们可以使用以下SQL查询来获取Salary最高的前3名员工:
SELECT TOP 3 * FROM Employees
ORDER BY Salary DESC;
运行结果如下:
| ID | Name | Salary |
|---|---|---|
| 5 | Emma | 7500 |
| 8 | Henry | 7200 |
| 7 | Grace | 6800 |
我们也可以使用以下SQL查询来获取Salary排名第4至第6的员工:
SELECT * FROM Employees
ORDER BY Salary
OFFSET 3 ROWS FETCH NEXT 3 ROWS ONLY;
运行结果如下:
| ID | Name | Salary |
|---|---|---|
| 6 | Frank | 5800 |
| 9 | Iris | 5900 |
| 2 | Bob | 6000 |
通过以上示例,我们可以看到如何使用TOP和OFFSET FETCH进行限制查询,以便在SQL Server中获取我们想要的数据结果。
极客教程