ORDER BY 子句按一列或多列(最多 8,060 个字节)对查询结果进行排序。有关 ORDER BY 子句最大大小的详细信息,请参阅 ORDER BY 子句 (Transact-SQL)。
Microsoft SQL Server 2005 允许在 FROM 子句中指定对 SELECT 列表中未指定的表中的列进行排序。ORDER BY 子句中引用的列名必须明确地对应于 SELECT 列表中的列或 FROM 子句中的表中的列。如果列名已在 SELECT 列表中有了别名,则 ORDER BY 子句中只能使用别名。同样,如果表名已在 FROM 子句中有了别名,则 ORDER BY 子句中只能使用别名来限定它们的列。
排序可以是升序的 (ASC),也可以是降序的 (DESC)。如果未指定是升序还是降序,就假定为 ASC。
SELECT [USER_ID],[USER_NAME],[USER_EMAIL],[USER_PASSWORD] FROM users where [USER_EMAIL] is not null and [USER_PASSWORD] is not null --说明:选择从11到15的记录 select top 5 [USER_ID],[USER_NAME],[USER_EMAIL],[USER_PASSWORD] from (select top 15 [USER_ID],[USER_NAME],[USER_EMAIL],[USER_PASSWORD] from users order by [USER_ID] asc) users2 where [USER_EMAIL] is not null and [USER_PASSWORD] is not null order by [USER_ID] desc
上述语句
(select top 15 [USER_ID],[USER_NAME],[USER_EMAIL],[USER_PASSWORD] from users order by [USER_ID] asc) users2
表示将前数据库的前15条记录按升序排列,存放在别名为user2的表中。
然后再通过
select top 5
和
order by [USER_ID] desc
这里两条语句来选择出第11-15条记录。上述order by [USER_ID] desc是将原先查询的15条记录逆序排列,然后通过top5选择逆序后的前五5记录,所以最后结果是从第15-11条的记录。
如下查询代码所示,我们可以看到有一行的where被注释了,这是因为在全面的查询集中已经去掉了不符合要求的内容了,后面就不需要再用where来限定。代码注释还给出了首末数的计算方法。
--第二个数-第一个数+1开始,到第二个数位置 --从7001开始,到11828为止。得出第一个数,11828-x+1=7001,x=4828 SELECT top 4828 '<User>'+ '<Username>' + [USER_NAME] + '</Username>', '<Email>' + [USER_EMAIL] + '</Email>', '<Password>' + [USER_PASSWORD] + '</Password>' + '</User>' FROM (select top 11828 [USER_ID],[USER_NAME],[USER_EMAIL],[USER_PASSWORD] from users where [USER_EMAIL] is not null and [USER_PASSWORD] is not null and [USER_NAME] not LIKE '%&%' order by [USER_ID] asc) users2 --where [USER_EMAIL] is not null and [USER_PASSWORD] is not null and [USER_NAME] not LIKE '%&%' order by [USER_ID] desc