在本教程中,将学习如何使用SQL Server SELECT TOP
语句来限制查询返回的行。
SELECT TOP
子句用于限制查询结果集中返回的行数或行百分比。
由于存储在表中的行的顺序是不可预测的,因此SELECT TOP
语句始终与ORDER BY
子句一起使用。 结果,结果集限于前N
个有序行数。
以下是带有SELECT
语句的TOP
子句的语法:
SELECT TOP (expression) [PERCENT]
[WITH TIES]
FROM
table_name
ORDER BY
column_name;
在此语法中,SELECT
语句可以包含其他子句,如:WHERE
,JOIN
,HAVING
和GROUP BY
。
expression
-TOP
关键字后面是一个表达式,它指定要返回的行数。 如果使用PERCENT
,则将表达式计算为浮点值,否则将其转换为BIGINT
值。PERCENT
-PERCENT
关键字指示查询返回前N
个行百分比,其中N
是表达式的结果。WITH TIES
-WITH TIES
用于返回更多行,其值与有限结果集中的最后一行匹配。 请注意,WITH TIES
可能会导致返回的行数多于在表达式中指定的行数。
例如,如果要返回表达式最多的产品,可以使用TOP 1
。但是,如果两个或更多产品的价格与最贵的产品相同,那么会错过结果集中其他最贵的产品。 为避免这种情况,可以使用TOP 1 WITH TIES
。 它不仅包括第一个最贵的产品,还包括第二个,第三个,等等。
SQL Server SELECT TOP示例
下面将使用示例数据库中的production.products
表进行演示。
1. 使用具有恒定值的TOP
以下示例使用常量值返回前10
个最贵的产品。
SELECT TOP 10
product_name,
list_price
FROM
production.products
ORDER BY
list_price DESC;
执行上面查询语句,得到以下结果:
2. 使用TOP返回行的百分比
以下示例使用PERCENT
指定结果集中返回的产品数。 production.products
表有321
行,因此,321
的百分之一是分数值(3.21
),SQL Server将其四舍五入到下一个整数,在这种情况下是4
行记录。
SELECT TOP 1 PERCENT
product_name,
list_price
FROM
production.products
ORDER BY
list_price DESC;
执行上面查询语句,得到以下结果:
3. 使用TOP WITH TIES包含与最后一行中的值匹配的行
以下声明返回了最贵的前三个产品:
SELECT TOP 3 WITH TIES
product_name,
list_price
FROM
production.products
ORDER BY
list_price DESC;
执行上面查询语句,得到以下结果:
在此示例中,第三个最贵的产品的定价为6499.99
。 由于语句中使用TOP WITH TIES
,因此它返回了另外价格与第三个相同的三个产品。
在本教程中,学习了如何使用SQL Server SELECT TOP
语句来限制查询返回的行数或行百分比。