SQL Server ORDER BY17 Mar 2025 | 5 分钟阅读 ORDER BY 子句用于根据给定的列或列列表,以升序或降序排列表的数据。 它通常与 SELECT 语句一起使用,因为它返回的记录没有按特定顺序排序。 这意味着 SQL Server 以未指定的顺序生成输出。 但是,使用 ORDER BY 子句可保证输出中的记录按升序或降序排序。 此子句允许通过定义单个或多个列来对表进行排序。 语法以下是说明 SQL Server 中 ORDER BY 子句的语法 上面语法参数的说明如下 Column_lists: 它指示我们要检索到结果集中的列的名称。 Table_name: 它指示我们要从中检索列的表的名称。 我们必须在 FROM 子句中提供至少一个表名。 Conditions: 这是一个可选参数,将用于过滤表记录。 column_name [ASC | DESC]: 它指示要排序的表的列的名称。 ASC 关键字是可选的,但如果定义,它会将输出按升序排序(从最低到最高)。 DESC 关键字是可选的,但如果定义,它会将输出按降序排序(从最高到最低)。 如果我们不定义 ASC 或 DESC 关键字,SQL Server 将使用 ASC 作为默认排序顺序。 SQL Server 认为 NULL 值为最低。 此外,ORDER BY 子句是在处理带有 ORDER BY 子句的 SELECT 语句时要考虑的最后一个子句。 ORDER BY 子句的示例让我们通过实际的几个例子来了解 ORDER BY 子句在 SQL Server 中的工作方式。 在这里,我们将使用表 employee_info 来演示此子句。 employee_info 表包含以下记录 ![]() 示例1: 以下语句说明了 ORDER BY 子句,而没有指定任何排序顺序。 在这里,我们将指定 'salary' 列来对表进行排序。 执行该语句将返回以下输出,我们看到该表是基于 salary 列排序的。 由于我们没有指定排序顺序,SQL Server 将按默认顺序对表进行排序 ![]() 示例2: 此示例将基于单个列按降序对结果集进行排序。 以下语句通过使用雇员姓名列按降序对 employee_info 表进行排序 执行该语句将显示以下输出。 由于我们显式指定了 DESC 关键字,因此 SQL Server 基于姓名值按降序对结果集进行了排序。 ![]() 示例3: 此示例将基于多个列对结果集进行排序。 以下语句将返回雇员的姓名、职业和薪水。 它首先按salary 列对雇员列表进行排序,然后按name 列进行排序。 执行该语句将生成以下结果集 ![]() 示例4: 此示例将基于多个列和不同的顺序对结果集进行排序。 以下语句将返回雇员的姓名、职业和薪水。 它首先按薪水列按降序对雇员列表进行排序,然后按姓名按升序对已排序的结果集进行排序。 执行该语句将生成以下结果集 ![]() 示例5: 此示例将基于 SELECT 列表中未定义的列对结果进行排序。 因为在某些情况下,用于对结果进行排序的列名不会出现在 select 列表中。 以下语句基于工作时间对雇员进行排序,即使 working_hours 列未在 select 列表中列出。 应该注意的是,工作时间列是在 employee_info 表中定义的。 否则,我们将有一个无效的查询。 现在,执行查询以显示结果 ![]() 示例6: 此示例将基于定义的表达式对结果集进行排序。 以下示例使用 LEN() 函数,该函数返回字符串的字符数。 在这里,我们在 ORDER BY 子句中使用此函数来检索按其姓名长度排序的雇员信息。 此查询将生成以下输出 ![]() 示例7: 此示例将基于列的序号位置对表进行排序。 我们这样做是因为 SQL Server 允许我们按 SELECT 列表中的列的序号位置对结果进行排序。 给定的查询通过指定 name 和 occupation 列的序号位置而不是显式指定列名来对 employee_info 表名称进行排序 执行该语句将显示以下结果集 ![]() 在该语句中,name 列由 1 表示,occupation 列由 2 表示。此语句已成功执行,但 DBA 认为在 ORDER BY 子句中使用列的序号位置是不好的编程实践。 一些流行的原因如下
因此,建议始终在 ORDER BY 子句中直接指定列名,以消除未来的困难。 ORDER BY 子句中的 OFFSET 和 FETCH 选项OFFSET 选项用于 ORDER BY 子句中,以消除从起始记录 (TOP) 开始的记录数。 这意味着 OFFSET 指定了从结果集中返回行的起始点。 ORDER BY 子句中的 FETCH 选项用于指定在查询中处理 OFFSET 子句后返回的行数。 示例 假设我们要获取从第 3 个记录开始到接下来的四个行的雇员记录。 通过使用 OFFSET 和 FETCH 子句可以轻松检索它。 这是查询 执行该语句将返回以下输出,其中 OFFSET 3 跳过三个行,而 FETCH 4 ROWS ONLY 显示所需的结果。 ![]() 本文将深入解释 SQL Server 中的 ORDER BY 子句。 在这里,我们学习了 ORDER BY 子句是什么,如何在不同的情况下使用它,以及 OFFSET 和 FETCH 选项如何详细地与此子句一起工作。 下一个主题SQL Server HAVING |
我们请求您订阅我们的新闻通讯以获取最新更新。