SQL ORDER BY 子句

本文详细介绍了SQL中ORDERBY语句的功能及用法,包括如何按字母顺序或逆字母顺序对查询结果进行排序,以及如何结合ASC和DESC关键字实现多列排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ORDER BY 语句用于对结果集进行排序。

ORDER BY 语句

ORDER BY 语句用于根据指定的列对结果集进行排序。

ORDER BY 语句默认按照升序对记录进行排序。

如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。

原始的表 (用在例子中的):

Orders 表:

CompanyOrderNumber
IBM3532
W3School2356
Apple4698
W3School6953

实例 1

以字母顺序显示公司名称:

SELECT Company, OrderNumber FROM Orders ORDER BY Company

结果:

CompanyOrderNumber
Apple4698
IBM3532
W3School6953
W3School2356

实例 2

以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):

SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber

结果:

CompanyOrderNumber
Apple4698
IBM3532
W3School2356
W3School6953

实例 3

以逆字母顺序显示公司名称:

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC

结果:

CompanyOrderNumber
W3School6953
W3School2356
IBM3532
Apple4698

实例 4

以逆字母顺序显示公司名称,并以数字顺序显示顺序号:

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC

结果:

CompanyOrderNumber
W3School2356
W3School6953
IBM3532
Apple4698

注意:在以上的结果中有两个相等的公司名称 (W3School)。只有这一次,在第一列中有相同的值时,第二列是以升序排列的。如果第一列中有些值为 nulls 时,情况也是这样的。



### SQL ORDER BY 子句的使用方法与示例 #### 基本语法 `ORDER BY` 子句用于对查询结果中的记录按照指定列进行排序。默认情况下,排序是升序(ASC),但如果指定了 `DESC` 关键字,则会以降序排列。 基本语法如下: ```sql SELECT column_list FROM table_name ORDER BY column_name ASC|DESC; ``` 例如,在表 `[dbo].[rules]` 中,如果希望按 `RULE_TYPE` 进行倒序排序并按 `RULE_ID` 进行正序排序,可以写成以下形式[^4]: ```sql select RULE_TYPE, RULE_ID from [dbo].[rules] order by RULE_TYPE desc, RULE_ID asc; ``` #### 结合多个列排序 当需要基于多列进行排序时,可以在 `ORDER BY` 后面依次列出这些列名,并分别指定其排序方向。如果没有显式声明 `ASC` 或 `DESC`,则默认为升序。 例如,下面的例子展示了如何先依据 `RULE_TYPE` 的降序再依 `RULE_ID` 升序来整理数据: ```sql select RULE_TYPE, RULE_ID from [dbo].[rules] order by 1 desc, 2 asc; ``` 这里,“1” 和 “2” 是位置占位符,表示第一个和第二个选定字段。 #### 非检索列作为排序条件 尽管大多数时候我们会用作选择列表的一部分来进行排序操作,但实际上也可以利用那些未被选入最终结果显示区域内的其他隐藏属性来做进一步精细化控制。这种做法虽然少见却依然有效合法[^3]: 假设存在一张员工信息表格 Employee ,其中包含 Salary 字段但不打算展示出来,仅想据此调整输出次序的话可如此实现: ```sql SELECT Name, Department FROM Employees ORDER BY Salary DESC ; ``` #### 开窗函数中的应用 除了常规场景外,在更复杂的分析型需求下比如累积计算或者排名统计等领域里也经常需要用到它配合窗口定义语句共同完成任务。例如通过累加每个人的薪水数额形成阶梯式的增长趋势图谱[^5]: ```sql select PName, PProvince, PCity, PAge, PSalary, sum(PSalary) over(order by PSalary rows between unbounded preceding and current row) as CumulativeSalarySum from TMP_Person; ``` #### 联合运算符下的特殊处理 对于涉及集合逻辑运算如 UNION、EXCEPT 及 INTERSECT 等情况而言,由于它们本质上属于集合理论范畴的操作所以各自独立执行完毕之后才会统一考虑整体层面的一致性呈现问题因此只有在整个表达式最后才允许单独附加一次全局性的 order by 来决定最终展现样式[^2]. 典型例子如下所示: ```sql (SELECT name FROM students WHERE grade='A') UNION ALL (SELECT name FROM teachers WHERE department='Mathematics') ORDER BY name; ``` 以上就是关于SQLOrder By的一些常见以及高级的应用实例介绍希望能够帮助您更好地理解和运用这一强大功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值