SQL Server Select Top语句

在本教程中,将学习如何使用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语句可以包含其他子句,如:WHEREJOINHAVINGGROUP 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语句来限制查询返回的行数或行百分比。


上一篇: SQL Server数据查询 下一篇: SQL Server连接表