SQL Server 的 TOP 子句用于限制查询返回的行数。通常,数据库和表包含数百万甚至数十亿条记录。因此,如果您想查看前 10 名产品,我们可以使用 TOP 子句并提取所需行数。
SQL SELECT TOP 子句语法
要检索少量记录或限制所选行的数量,我们必须使用 TOP 子句,后跟表达式或百分比,语法如下:
SELECT TOP Expression | Percentage [Column_Names] FROM [Table_Name]
我们可以将表达式或百分比与 SQL Server TOP 子句一起使用。例如,TOP 1 表示将检索第一条记录。如果我们写 TOP 10 Percent,SELECT 语句将提取 10% 的总记录。您还可以使用 ORDER BY 语句对数据进行相应的排序。
我们将使用下面显示的表数据来解释 Top 子句。

SQL TOP 1 示例
在此 Top 子句示例中,我们将从 customers 表中选择第一行。
SELECT TOP 1 [EmpID]
,[FirstName]
,[LastName]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
FROM [Customer]
TOP 子句检索表中的第一行。

Select TOP 10 示例
返回 customers 表中的前 10 行。
SELECT TOP 10 [EmpID]
,[FirstName]
,[LastName]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
FROM [Customer]

SQL Server TOP * 示例
我们还可以使用 * 符号而不是写出所有列名(不推荐)。但是,首先,让我们看看 Top * 子句是如何工作的。
SELECT TOP 5 * FROM [Customer]

SQL Top 和 Order By 子句语句
在表中,数据默认不会按任何顺序插入。因此,如果您想检索年收入最高的三个客户,您必须使用 ORDER BY 语句对数据进行排序。接下来,您必须使用此 Top 子句获取前三个客户。
SELECT TOP 5 [EmpID]
,[FirstName]
,[LastName]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
FROM [Customer]
ORDER BY YearlyIncome DESC
数据将按 [年收入] 降序排序;然后将检索前五行。

Where 和 Order by 示例
您还可以使用 Where 子句和 Top 子句来限制 select 语句选择的记录。
以下 Where Clause 查询选择年销售额大于 1300 的前 10 条记录。请记住,我们还使用 ORDER BY 按降序对 [年收入] 进行排序来对 Server 数据进行排序。
SELECT TOP 10 [EmpID]
,[FirstName]
,[LastName]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
FROM [Customer]
WHERE Sales > 1300
ORDER BY YearlyIncome DESC

百分比示例
我们使用 SQL Server TOP PERCENT 来指定 select 查询需要返回的客户数量。这里,我们使用前 40%。这意味着 6 行,因为我们的 customers 表有 15 行。
SELECT TOP 40 PERCENT [EmpID]
,[FirstName]
,[LastName]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
FROM [Customer]

让我们使用 ORDER BY 语句以及 TOP Percent。
SELECT TOP 40 PERCENT [EmpID]
,[FirstName]
,[LastName]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
FROM [Customer]
ORDER BY Sales DESC

WITH TIES
下面的示例将返回年收入最高的客户的前 5 行。当我们使用 WITH TIES 后跟 TOP 子句时,它将返回前 5 条记录。此外,所有年收入等于 SELECT 语句最后一条记录(第 5 条)的记录。
SELECT TOP 5 WITH TIES [EmpID]
,[FirstName]
,[LastName]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
FROM [Customer]
ORDER BY YearlyIncome DESC
尽管我们 选择了 前 5 行,但输出显示了 7 条记录。因为第 5、6 和 7 条记录的年收入相同。如果还有更多 [年收入] = 80000 的记录,它们也将在结果窗口中显示。

注意:WITH TIES 仅在与 ORDER BY 语句一起使用时才有效;否则,服务器将抛出错误。