Skip to content

SQL Order By

ORDER BY 子句用于对查询结果集中的行进行排序。你可以按一个或多个列进行排序,排序方式可以是升序或降序。

默认情况下,ORDER BY 子句按升序(ASC)对记录进行排序。要按降序排序记录,请使用 DESC 关键字。

如果未指定 ORDER BY 子句,数据库系统将按未定义的顺序返回行,这可能因查询执行计划、数据存储或甚至数据库版本而异。如果你需要一个确定的排序顺序,请务必使用 ORDER BY。

SELECT column1, column2, … FROM table_name ORDER BY column_to_sort_by_1 [ASC|DESC], column_to_sort_by_2 [ASC|DESC], …;

  • ASC:按升序排序(A 到 Z,0 到 9)。这是默认排序方式。

  • DESC:按降序排序(Z 到 A,9 到 0)。

你也可以按列的位置进行排序(例如,使用 ORDER BY 2 DESC 按 SELECT 列表中的第二列降序排序),但这通常不建议这样做,因为 SELECT 列表的更改可能会破坏排序逻辑,不利于维护。优先使用列名进行排序。

对于以下示例,我们假设有一个 Customers 表,包含 CustomerID、CustomerName、City 和 Country 等列。

以下 SQL 语句从 Customers 表中选择所有客户,并按 Country 列升序(默认)排序:

SELECT CustomerName, City, Country
FROM Customers
ORDER BY Country;

以下 SQL 语句从 Customers 表中选择所有客户,并按 Country 列降序排序:

SELECT CustomerName, City, Country
FROM Customers
ORDER BY Country DESC;

以下 SQL 语句选择所有客户,首先按 Country(升序)排序,然后在每个国家内按 CustomerName(升序)排序:

SELECT CustomerName, City, Country
FROM Customers
ORDER BY Country, CustomerName;

这意味着来自“阿根廷”的所有客户将出现在“巴西”之前,而在“阿根廷”内部,客户将按名称字母顺序排序。

以下 SQL 语句选择所有客户,首先按 Country 升序排序,然后在每个国家内按 City 降序排序:

SELECT CustomerName, City, Country
FROM Customers
ORDER BY Country ASC, City DESC;

因此,对于“德国”,像“慕尼黑”(München)这样的城市如果存在德国客户,会出现在“柏林”之前。

你还可以按表达式进行排序,例如 ORDER BY LENGTH(CustomerName)。排序时对 NULL 值的处理(NULLS FIRST 或 NULLS LAST)因数据库而异,或者在某些系统中可以显式控制(例如,PostgreSQL 和 Oracle 允许使用 NULLS FIRST/NULLS LAST 修饰符)。默认情况下,许多系统将 NULL 视为低于任何非 NULL 值(因此 ASC 时 NULLS FIRST),或高于任何非 NULL 值(因此 ASC 时 NULLS LAST)。请查阅你的 RDBMS 文档了解具体细节。

  • 按价格从低到高显示产品。

  • 按姓氏字母顺序列出用户。

  • 首先显示最新评论。