order by 、与top 1 的执行先后顺序

samyp1234 2018-02-28 04:14:32
select top 1 * from t1 order by a1 desc

这里的order by a1 desc、与top 1 的执行顺序,哪个先?哪个后?
即:
可以保证取出的,是 a1倒序排序后的 第一个记录吗? 还是没有排序的 只是top 1 ?
...全文
838 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2018-02-28
  • 打赏
  • 举报
回复
SELECT 语句的逻辑处理顺序

以下步骤显示 SELECT 语句的逻辑处理顺序(即绑定顺序)。
此顺序确定在一个步骤中定义的对象何时可用于后续步骤中的子句。
例如,如果查询处理器可以绑定到(访问)在 FROM 子句中定义的表或视图,则这些对象及其列可用于所有后续步骤。
相反,因为 SELECT 子句处于步骤 8,所以,在该子句中定义的任何列别名或派生列都无法被之前的子句引用。
不过,它们可由 ORDER BY 子句之类的后续子句引用。
请注意,该语句的实际物理执行由查询处理器确定,因此顺序可能与此列表不同。


FROM


ON


JOIN


WHERE


GROUP BY


WITH CUBE 或 WITH ROLLUP


HAVING


SELECT


DISTINCT


ORDER BY


TOP
OwenZeng_DBA 2018-02-28
  • 打赏
  • 举报
回复
这个通过查看执行计划,可以看到
二月十六 版主 2018-02-28
  • 打赏
  • 举报
回复
吉普赛的歌 版主 2018-02-28
  • 打赏
  • 举报
回复
DECLARE @t TABLE (a1 INT PRIMARY KEY)
INSERT INTO @t VALUES (1)
INSERT INTO @t VALUES (2)
INSERT INTO @t VALUES (3)
select  top 1 *  from  @t As t1 order by a1 DESC
/*
a1
3
*/
是 a1 降序排序后的每一个记录。
听雨停了 2018-02-28
  • 打赏
  • 举报
回复

SELECT TOP 1 * FROM (
SELECT 2 AS a1 UNION ALL
SELECT 3 UNION ALL
SELECT 1 UNION ALL
SELECT 8 UNION ALL
SELECT 5
) a ORDER BY a1 DESC


事实证明先执行order by,再执行的top 1
删库到跑路 2018-02-28
  • 打赏
  • 举报
回复
order by a1 desc排序完成后的top1

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧