用 ORDER BY 对行进行排序

本文介绍SQL Server中的ORDERBY子句,解释如何使用它对查询结果进行升序或降序排序,包括对未在SELECT列表中指定的列进行排序的方法。同时,文章还展示了ORDERBY子句与其他SQL元素结合使用的实例。

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

ORDER BY 子句按一列或多列(最多 8,060 个字节)对查询结果进行排序。

从 Microsoft SQL Server 2005 开始,SQL Server 允许在 FROM 子句中指定对 SELECT 列表中未指定的表中的列进行排序。ORDER BY 子句中引用的列名必须明确地对应于 SELECT 列表中的列或 FROM 子句中的表中的列。如果列名已在 SELECT 列表中有了别名,则 ORDER BY 子句中只能使用别名。同样,如果表名已在 FROM 子句中有了别名,则 ORDER BY 子句中只能使用别名来限定它们的列。

排序可以是升序的 (ASC),也可以是降序的 (DESC)。如果未指定是升序还是降序,就假定为 ASC。

下面的查询返回按 ProductID 升序排序的结果:

USE AdventureWorks;
GO
SELECT ProductID, ProductLine, ProductModelID
FROM Production.Product
ORDER BY ProductID

 

如果 ORDER BY 子句中指定了多个列,则排序是嵌套的。下面的语句先按产品子类别降序排序 Production.Product 表中的行,然后在每个产品子类别中按 ListPrice 升序排序这些行。

 

USE AdventureWorks;
GO
SELECT ProductID, ProductSubcategoryID, ListPrice
FROM Production.Product
ORDER BY ProductSubcategoryID DESC, ListPrice

 

ORDER BY 子句的准确结果取决于被排序的列的排序规则。有关详细信息,请参阅使用排序规则。对于 charvarcharncharnvarchar 列,可以指定 ORDER BY 操作按照表或视图中定义的列的排序规则之外的排序规则执行。可以指定 Windows 排序规则名称或 SQL 排序规则名称。例如,使用 Latin1_General 排序规则定义 AdventureWorks 数据库中的 Person.Contact 表的 LastName 列,但在下面的脚本中,使用 Traditional_Spanish 排序规则按升序返回列。

USE AdventureWorks;
GO
SELECT LastName FROM Person.Contact
ORDER BY LastName
COLLATE Traditional_Spanish_ci_ai ASC
GO

 

无法对数据类型为 textntextimagexml 的列使用 ORDER BY。此外,在 ORDER BY 列表中也不允许使用子查询、聚合和常量表达式。但是,可以在聚合或表达式的选择列表中使用用户指定的名称。例如:

SELECT Color, AVG (ListPrice) AS 'average list price'
FROM Production.Product
GROUP BY Color
ORDER BY 'average list price'

 

ORDER BY 只保证查询的最外面的 SELECT 语句的排序结果。例如,考虑下面的视图定义:

CREATE VIEW TopView AS 
SELECT TOP 50 PERCENT * FROM Person.Contact       
ORDER BY LastName 

 

然后查询视图:

SELECT * FROM TopView   

 

尽管视图定义包含 ORDER BY 子句,但是该 ORDER BY 子句仅用于确定 TOP 子句返回的行数。查询视图自身时,SQL Server 不保证将对结果进行排序,除非明确指定,如下面的查询所示:

SELECT * FROM TopView       
ORDER BY LastName   

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值