MS SQL:如何在查询执行中评估变量和别名?

MS SQL: How are variables and aliases evaluated within query execution?

我正在做一个 MS SQL 项目,总体来说 SQL 是个新手。

在包含以下内容的查询中:

SELECT DISTINCT u.sUserType
FROM @users u

并且别名(变量'u')在声明变量之前被使用(@param 之前已经声明)。再说一遍:

SELECT  
    ...,
    aType.hMy as hAssetType,
    ...,
    ...,
    ...,
    ...,
    etc
FROM @users u
        LEFT JOIN somTableName aType on UPPER(u.sAssetType) UPPER(aType.sType)
        LEFT JOIN etc
        LEFT JOIN etc

我的背景非常Javascript,其中有'hoisting'的概念。

问: 是否可以从编译或解释的角度讨论 SQL 查询?

问: 在使用后定义变量的查询执行是否与 Javascript 提升相当?

问: 此外,这与 SQL 标准的其他实现相比如何?

----- 编辑 -----

下面的回答指出别名与变量不同。

变量需要先声明才能被引用,但是

  1. 当然,在执行开始之前,SQL 引擎会解释查询并选择整个查询的执行计划。

  2. 您将别名与变量混为一谈。在 SQL 中,变量必须在使用前声明。可以在 SQL 查询中引用别名 "higher up",并定义 "further down",但我怀疑它是否与 "hoisting" 相当,不管它是什么,因为 JavaScript 是一个逐行的事情,SQL 查询被解释为单个基于集合的操作。

  3. 你的意思是这在不同的 RDBMS 之间有何不同?一点也不多,从我合作过的几个。