在T-SQL中使用顶部

时间:2019-04-15 04:09:35

标签: sql-server tsql

有关使用Top的问题。例如,我们有以下SQL语句:

SELECT TOP (5) WITH TIES orderid, orderdate, custid, empid
FROM Sales.Orders
ORDER BY orderdate DESC;

它先按orderdate排序返回的行,然后选择最上面的五行。 但这不是ORDER子句之后的SELECT子句,这意味着先返回随机的前五个顺序,然后再按orderdate对这五个行进行排序吗?

3 个答案:

答案 0 :(得分:3)

语句中的命令顺序不能反映SQL遵循的实际操作顺序。请参阅this article,其中显示了顺序:

  1. 来自
  2. 其中
  3. 分组依据
  4. 拥有
  5. 选择
  6. 订购
  7. 限制

如您所见,TOP操作(限制)是最后执行的操作。

答案 1 :(得分:1)

  

但这不是ORDER子句出现在SELECT子句之后,这意味着   先随机返回前五个顺序,然后再返回   五行按orderdate排序?

不。 ORDER BYSELECT之后进行处理,但将结果集限制为5行甚至更晚。

实际查询处理的物理细节可能会有所不同,但最终结果似乎是服务器按照orderdate对整个表进行了排序,然后选择了前5行(或由于联系而需要更多),返回这些行并丢弃其余的行。

答案 2 :(得分:1)

问题已经被接受。但我想引用Microsoft文档中的内容。

Logical Processing Order of the SELECT statement

  
      
  1.   
  2. 开启
  3.   
  4. 加入
  5.   
  6. 在哪里
  7.   
  8. 组别
  9.   
  10. 多维数据集或具有汇总
  11.   
  12. 拥有
  13.   
  14. 选择
  15.   
  16. DISTINCT
  17.   
  18. ORDER BY
  19.   
  20. TOP
  21.