34,590
社区成员
发帖
与我相关
我的任务
分享
SELECT 语句的逻辑处理顺序
以下步骤显示 SELECT 语句的逻辑处理顺序(即绑定顺序)。
此顺序确定在一个步骤中定义的对象何时可用于后续步骤中的子句。
例如,如果查询处理器可以绑定到(访问)在 FROM 子句中定义的表或视图,则这些对象及其列可用于所有后续步骤。
相反,因为 SELECT 子句处于步骤 8,所以,在该子句中定义的任何列别名或派生列都无法被之前的子句引用。
不过,它们可由 ORDER BY 子句之类的后续子句引用。
请注意,该语句的实际物理执行由查询处理器确定,因此顺序可能与此列表不同。
FROM
ON
JOIN
WHERE
GROUP BY
WITH CUBE 或 WITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
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 降序排序后的每一个记录。
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