对查询进行排序,它是如何工作的?

时间:2013-10-17 17:28:18

标签: sql-server sorting sql-order-by

有人可以向我解释为什么SQL Server可以实现这一点:

select column1 c,column2 d
from table1
order by c,column3

我可以使用别名对column1进行排序,因为order by子句是在select子句之后应用的,但是如何按照我没有检索的列进行排序?

提前致谢。

3 个答案:

答案 0 :(得分:2)

FROM子句中对象的所有列名都可用于ORDER BY,但GROUPing或DISTINCT除外。正如您所指出的那样,别名也可用,因为SELECT语句是在ORDER BY之前处理的。

这是您信任优化器的情况之一。

答案 1 :(得分:1)

根据联机丛书(http://technet.microsoft.com/en-us/library/ms188385(v=sql.90).aspx

  

ORDER BY子句可以包含未出现在的子句   选择清单。但是,如果指定了SELECT DISTINCT,或者如果指定了   语句包含GROUP BY子句,或者如果是SELECT语句   包含一个UNION运算符,排序列必须出现在select中   名单。

     

此外,当SELECT语句包含UNION运算符时,   列名或列别名必须是第一个中指定的那些   选择清单。

答案 2 :(得分:0)

您可以按照您在select select column1 c中定义的别名进行排序,然后告诉它按照您未包含在select中的列进行排序,但仍然存在于表中。这允许我们按数据表达式排序,而不必在选择中进行排序。

Select cost, tax From table ORDER BY (cost*tax)