7.2 SQL Server数据排序

SQL Server ORDER BY

SQL Server ORDER BY子句简介

当使用SELECT语句从表中查询数据时,结果集中的行顺序无法保证。这意味着SQL Server可以返回未指定行顺序的结果集。

唯一可以保证返回有顺序的结果集是使用ORDER BY子句,语法如下:

SELECT
select_list
FROM
table_name
ORDER BY
column_name | expression [ASC | DESC ];

其中:
column_name | expression

首先,指定要对查询结果集进行排序的列名或表达式。如果指定多列,结果集将按第一列排序,然后按第二列排序,依此类推。

ASC | DESC
其次,使用ASCDESC指定指定列中的值应按升序还是降序排序。
默认是ASC,如果是值为NULL,则视为最低值。
在处理有ORDER BY子句的查询语句时,ORDER BY通常是最后处理。

ORDER BY示例

存在如下学生表:

A)按一列升序排序

下列语句把结果集通过学生的年龄进行升序排序:

select
*
from
dbo.Students
order by
Age;

本例中,没有指定ASCDESC,ORDER BY默认使用ASC;

B)按一列降序排序

下列语句把结果集通过学生的年龄进行降序排序:

select
*
from
dbo.Students
order by
Age DESC;

在本例中,由于我们显式指定了DESCORDER BY子句按Age列中的值按降序对结果集进行排序。

C)按多列对结果集排序

下面的语句查询学生的Id、名字、年龄。它先按年龄排序,然后按学号排序(年龄相同的再按照学号排序)。

select
Id,
NickName,
StudentNo,
Age
from
dbo.Students
order by
Age,
StudentNo

D)按多列和不同顺序对结果集排序

这次,我们先把结果集按照年龄降序排列,然后年龄相同的再按照学号升序排列:

select
Id,
NickName,
StudentNo,
Age
from
dbo.Students
order by
Age DESC,
StudentNo ASC

E)按不在SELECT列表中的列对结果集排序

可以按未出现在选择列表中的列对结果集进行排序。例如,以下语句按学生班级名ClassName进行排序,即使班级名ClassName未显示在SELECT列表中。

select
Id,
NickName,
StudentNo,
Age
from
dbo.Students
order by
ClassName

F)按表达式对结果集排序

LEN()返回字符串中的字符数。下面使用ORDER BY子句中的LEN()函数检索按名字长度排序的客户列表:

select
*
from
dbo.Students
order by
LEN(NickName) ASC;

结果中,名字越短的会显示在前面

G)按列的顺序位置排序

SQL Server允许您根据SELECT列表中显示的列的顺序位置对结果集进行排序。

下列语句先对SELECT中的Age进行排序,然后再对StudentNo进行排序:

select
Id,
Age,
StudentNo
from
dbo.Students
order by
2 ASC,--对应StudentNo,
3 DESC;--对应Age

这个例子,先是按照年龄进行升序,然后年龄相同的再按照学号进行降序。

H)ORDER BY GUID

在SQL Server中,如果想对结果集进行随机排序,可以使用如下方式:

select
Id,
Age,
StudentNo
from
dbo.Students
order by
NEWID();

这样,每次返回的结果集顺序都不一样。

posted @   平元兄  阅读(1443)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek “源神”启动!「GitHub 热点速览」
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示