6、order by 子句 对结果集进行排序
1、order by 子句
根据一个或多个行的值,按升序(默认)或降序对结果集进行排序。
语法:
select 字段1 from 表名 order by 字段2 [ASC | DESC];
- ASC: 升序(默认)
- DESC: 降序
字段名2可以是前面检索的字段名1,也可以是其他字段。
2、按多个字段排序
order by 子句中指定多个字段时,字段名之间用逗号(,)隔开,
按照指定列的顺序依次进行排序:
先按第一列排序,若第一列值相同,则按第二列排序,依此类推。
语法:
SELECT select_list FROM table_name ORDER BY sort_expression_1 [ASC | DESC], sort_expression_2 [ASC | DESC]; -- ORDER BY 子句首先按 sort_expression_1 对结果集进行排序,然后按 sort_expression_2 对已排序的结果集进行排序。
例如:表 employees 数据如下:
| name | department | salary |
|---|---|---|
| 张三 | 技术部 | 9000 |
| 李四 | 市场部 | 8000 |
| 王五 | 技术部 | 9000 |
| 赵六 | 市场部 | 8500 |
| 钱七 | 技术部 | 8000 |
先按部门升序,再按工资降序
SELECT * FROM employees ORDER BY department ASC, salary DESC;
排序过程:
- 先按照部门排序:
- 技术部:张三(9000)、王五(9000)、钱七(8000)
- 市场部:赵六(8500)、李四(8000)
- 再按照工资排序:
- 在“技术部”内部,按工资降序:张三 = 王五 > 钱七
- 若工资相同(张三和王五),则保持原始顺序(或按主键隐式排序,但不可依赖)
- 在“市场部”内部,按工资降序:赵六 > 李四
- 在“技术部”内部,按工资降序:张三 = 王五 > 钱七
结果:
| name | department | salary |
|---|---|---|
| 张三 | 技术部 | 9000 |
| 王五 | 技术部 | 9000 |
| 钱七 | 技术部 | 8000 |
| 赵六 | 市场部 | 8500 |
| 李四 | 市场部 | 8000 |
3、指定排序方向
检索数据排序默认为升序(asc 关键字,可省略不写),若要进行降序排序,需使用 desc 关键字
语法:
select 字段1 from 表名 order by 字段2 desc,字段3;
排序 asc 或desc 关键字只作用于前置的字段名,若想在多个字段上进行降序排序,必须对每个字段指定 desc 关键字。
4、筛选排序数据
使用 limit 关键字,该关键字位于 order by 之后
语法:
select 字段1 from 表名 order by 字段2 desc limit X,N;
本文来自博客园,作者:chao_xiong,转载请注明原文链接:https://www.cnblogs.com/chao-xiong/p/14579411.html

浙公网安备 33010602011771号