目录

  1. SQL ORDER BY 关键字简介
  2. ORDER BY 语法
  3. ORDER BY 排序方式
  4. ORDER BY 多列排序
  5. ORDER BY 排序与 NULL 值
  6. ORDER BY 和 LIMIT 子句结合使用
  7. ORDER BY 示例
  8. 参考资料

SQL ORDER BY 关键字简介

ORDER BY 关键字用于 SQL 查询中对查询结果进行排序。使用 ORDER BY,可以根据一个或多个列的值对结果进行升序或降序排序。默认情况下,ORDER BY 会按照升序(ASC)排列,但你也可以显式地指定降序(DESC)排序。

排序功能非常有用,特别是在处理大数据集时,它能够帮助你更轻松地查找最小值、最大值、最早或最晚的记录等。


ORDER BY 语法

ORDER BY 的基本语法如下:

SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;

  • SELECT:指定要查询的列。
  • FROM:指定查询的表。
  • WHERE:可选的条件子句,用于过滤记录。
  • ORDER BY:根据一个或多个列的值对查询结果进行排序。
  • ASC:升序排列,默认设置。
  • DESC:降序排列。

示例

SELECT * FROM employees ORDER BY salary DESC;

  • 该查询将返回所有员工记录,并根据 salary 降序排列。

ORDER BY 排序方式

ORDER BY 可以根据列的值进行升序或降序排列,具体方式由 ASCDESC 关键字来指定。

1. 升序排列(ASC)

升序排列是默认的排序方式。可以省略 ASC,SQL 默认将按照升序排列。

SELECT * FROM employees ORDER BY salary ASC;

  • 该查询将返回 salary 按升序排列的员工记录。

2. 降序排列(DESC)

降序排列将数据从大到小排列。

SELECT * FROM employees ORDER BY salary DESC;

  • 该查询将返回 salary 按降序排列的员工记录。

ORDER BY 多列排序

ORDER BY 也支持多列排序。你可以按照多个列的值进行排序,排序优先级从左到右按顺序排列。

示例

SELECT * FROM employees
ORDER BY department ASC, salary DESC;

  • 该查询首先按照 department 升序排列,再按 salary 降序排列,在同一个部门内,工资高的排在前面。

ORDER BY 排序与 NULL 值

在 SQL 排序中,NULL 值的排序行为因数据库系统而异。大多数数据库系统将 NULL 值视为“最小”值(如果按升序排列)或“最大”值(如果按降序排列)。

默认排序

  • 升序(ASC)NULL 排在结果集的最前面。
  • 降序(DESC)NULL 排在结果集的最后面。

示例

SELECT * FROM employees ORDER BY salary DESC;

  • 该查询将返回 salary 按降序排列,所有 NULL 值的 salary 将排在最后。

如果你希望调整 NULL 排序位置,可以使用数据库特定的函数,如 IS NULLIS NOT NULL


ORDER BY 和 LIMIT 子句结合使用

ORDER BY 常常与 LIMIT 子句结合使用,限制返回的记录数量。例如,你可能只想获取排序后的前 5 条记录。

示例

SELECT * FROM employees ORDER BY salary DESC LIMIT 5;

  • 该查询将返回薪水最高的前 5 个员工记录。

你还可以使用 OFFSET 来控制返回结果的起始位置,例如跳过前 10 条记录,获取接下来的记录。

SELECT * FROM employees ORDER BY salary DESC LIMIT 5 OFFSET 10;

  • 该查询将跳过前 10 条记录,然后返回接下来的 5 条记录。

ORDER BY 示例

示例 1:查询员工按薪水升序排序

SELECT * FROM employees ORDER BY salary ASC;

  • 该查询将返回所有员工记录,并按 salary 升序排列。

示例 2:查询员工按部门和薪水排序

SELECT * FROM employees ORDER BY department ASC, salary DESC;

  • 该查询将首先按 department 升序排列,再按 salary 降序排列,确保在同一个部门内薪水较高的员工排在前面。

示例 3:查询产品按价格降序排列

SELECT * FROM products ORDER BY price DESC;

  • 该查询将返回所有产品记录,并按 price 降序排列。

示例 4:查询薪水高于 50000 的员工并按薪水降序排列

SELECT * FROM employees WHERE salary > 50000 ORDER BY salary DESC;

  • 该查询将返回薪水大于 50000 的员工记录,并按薪水降序排列。

参考资料