Skip to content

sql-order-by-clause

ORDER BY 子句用于根据一个或多个列以升序或降序对 SELECT 语句的结果集进行排序。如果没有 ORDER BY 子句,查询返回的行顺序不保证。

ORDER BY 子句的基本语法如下:

SELECT column_list
FROM table_name
[WHERE condition]
ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;
  • ASC (升序): 将结果从最低排序到最高。这是默认排序顺序,因此可以省略。
  • DESC (降序): 将结果从最高排序到最低。

您可以按多列排序。结果首先按第一列排序,然后对于第一列中值相同的任何行,它们会按第二列排序,依此类推。

使用我们的 Customers 表:

+----+----------+-----+-------------+----------+
| ID | Name | Age | City | Salary |
+----+----------+-----+-------------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | Kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | Hyderabad | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-------------+----------+

以下查询按 Name 字母顺序对所有客户进行排序。

SELECT * FROM Customers
ORDER BY Name ASC; -- ASC 在此处可选

这将产生:

+----+----------+-----+-------------+----------+
| ID | Name | Age | City | Salary |
+----+----------+-----+-------------+----------+
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 3 | Kaushik | 23 | Kota | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 6 | Komal | 22 | Hyderabad | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
+----+----------+-----+-------------+----------+

以下查询按 Age 降序对客户进行排序。对于年龄相同的客户,则按 Name 升序排序。

SELECT * FROM Customers
ORDER BY Age DESC, Name ASC;

这将产生:

+----+----------+-----+-------------+----------+
| ID | Name | Age | City | Salary |
+----+----------+-----+-------------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
| 3 | Kaushik | 23 | Kota | 2000.00 |
| 6 | Komal | 22 | Hyderabad | 4500.00 |
+----+----------+-----+-------------+----------+

请注意,‘Chaitali’ 和 ‘Khilan’ 都年龄 25 岁,按姓名字母顺序排序。

虽然通常不推荐为了可读性而这样做,但您也可以按列在 SELECT 列表中的位置进行排序。例如,ORDER BY 2 将按 SELECT 列表中的第二列排序。

-- 按 'Name' 列排序,它是列表中的第 2 列
SELECT ID, Name, Salary FROM Customers
ORDER BY 2;