SQLite ORDER BY 子句
ORDER BY子句用于对查询结果进行排序。默认情况下,ORDER BY会按升序 (ASC) 排列数据,但也可以指定按降序 (DESC) 排列。通过指定一列或多列来排序,ORDER BY子句帮助你在查询中获取有序的结果集。
基本语法
SELECT column_name(s)
FROM table_name
WHERE condition
ORDER BY column_name [ASC|DESC];
column_name(s): 需要查询的列,可以是单列或多列。table_name: 需要查询的表。condition: 可选的查询条件。ORDER BY column_name: 指定排序依据的列名。ASC: 默认的排序方式,按升序排序。DESC: 按降序排序。
1. 按单列排序
ORDER BY 子句最简单的用法是根据单一列进行排序。
示例:
- 按
salary列升序排列员工数据:
SELECT * FROM employees
ORDER BY salary ASC;
- 该查询返回按薪资升序排列的员工记录。
- 按
salary列降序排列员工数据:
SELECT * FROM employees
ORDER BY salary DESC;
- 该查询返回按薪资降序排列的员工记录。
2. 按多列排序
ORDER BY 也可以根据多个列进行排序。当多列排序时,SQLite 会按顺序应用每一列的排序规则。
示例:
- 先按
department列升序,再按salary列降序排列员工数据:
SELECT * FROM employees
ORDER BY department ASC, salary DESC;
- 该查询首先按
department升序排列,然后在同一部门内按salary降序排列。
3. 默认排序方式
如果没有明确指定排序顺序,ORDER BY 默认按 升序 (ASC) 排序。
示例:
- 默认按
name升序排序:
SELECT * FROM employees
ORDER BY name;
- 该查询按员工名字的升序排列员工记录,默认使用升序。
4. 使用 NULL 值进行排序
SQLite 对 NULL 值的排序行为也需要注意:
- 在 升序 排序时,
NULL值排在最前面。 - 在 降序 排序时,
NULL值排在最后面。
示例:
- 查找
email列中没有值的员工(即NULL值),按name升序排列:
SELECT * FROM employees
WHERE email IS NULL
ORDER BY name ASC;
- 该查询返回所有
email列为NULL的员工,并按名字升序排列。 - 按
salary列降序排列,NULL值排在最后:
SELECT * FROM employees
ORDER BY salary DESC;
- 该查询返回员工数据,薪资降序排列,
NULL值排在最后。
5. 使用表达式进行排序
ORDER BY 还可以对表达式进行排序,例如对计算结果、函数结果等进行排序。
示例:
- 按员工年龄的平方值排序:
SELECT name, age
FROM employees
ORDER BY age * age;
- 该查询根据员工年龄的平方值排序,年龄较大的员工排在前面。
- 使用
LENGTH函数按名字长度排序:
SELECT name
FROM employees
ORDER BY LENGTH(name);
- 该查询根据名字的长度对员工数据进行排序,名字较短的员工排在前面。
6. 使用 LIMIT 和 ORDER BY 结合
ORDER BY 可以与 LIMIT 子句结合,返回排序后的前 N 条记录,常用于获取最小或最大值的数据。
示例:
- 查找薪资最高的 3 个员工:
SELECT * FROM employees
ORDER BY salary DESC
LIMIT 3;
- 该查询返回薪资最高的 3 个员工记录。
- 查找薪资最低的 5 个员工:
SELECT * FROM employees
ORDER BY salary ASC
LIMIT 5;
- 该查询返回薪资最低的 5 个员工记录。
总结
ORDER BY用于对查询结果进行排序。- 可以按单列或多列进行排序。
- 排序默认是 升序 (
ASC),可以显式使用 降序 (DESC) 排序。 - 可以结合
LIMIT获取排序后的前 N 条记录。 NULL值的排序会根据排序方式的不同有所不同,升序时NULL在前,降序时NULL在后。ORDER BY可以与 表达式 和 函数 配合使用,进行复杂的排序。
ORDER BY 是在查询中控制返回数据顺序的重要工具,尤其在需要展示有序数据时非常有用。更多详细内容请关注其他相关文章。