目录
- SQL ORDER BY 关键字简介
- ORDER BY 语法
- ORDER BY 排序方式
- ORDER BY 多列排序
- ORDER BY 排序与 NULL 值
- ORDER BY 和 LIMIT 子句结合使用
- ORDER BY 示例
- 参考资料
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
可以根据列的值进行升序或降序排列,具体方式由 ASC
或 DESC
关键字来指定。
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 NULL
或 IS 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 的员工记录,并按薪水降序排列。
发表回复