FROM CLAUSE(TSQL)中此SQL语句中的括号是什么

fos*_*ool 2 sql sql-server sql-server-2008-r2

第5行和第11行的括号是什么?

 1    SELECT
 2        s.name, s.ShirtDescription, c.Color, 
 3        z.Size, i.AvailableQTY, i.UnitPrice 
 4    FROM 
 5       (    
 6          test.ShirtInventory i
 7          join test.Colors c ON
 8              i.ColorID = c.id 
 9          join test.Shirts s ON
10              i.ShirtID = s.ID
11       )
12    JOIN test.Sizes z ON 
13       i.SizeID = z.ID 
14    WHERE .....
Run Code Online (Sandbox Code Playgroud)

我从未在FROM子句中看到过以这种方式使用的括号.这不是一个子查询,它没有确定表和连接的范围.您可以看到我在括号外引用i.SizeID的位置.当我第一次看到它时,我认为这可能是一种"提示"SQL Server如何获取数据的方法,但是当你删除parens时,执行计划中没有任何变化.

期待您的回复.编辑:错误的行

Mar*_*ith 7

在这种情况下,作为内部联接的任何内容都不是关联的和可交换的.

通常,您可以通过移动on子句的位置来更改参与连接的虚拟表,这可以应用可选的括号,以期使事情更清晰.

因此,例如,你可以有

SELECT P.PersonName,
       Pt.PetName,
       Pa.AccessoryName
FROM   Persons P
       LEFT JOIN Pets Pt
                  INNER JOIN PetAccessories Pa
                    ON Pt.PetName = Pa.PetName
         ON P.PersonName = Pt.PersonName;
Run Code Online (Sandbox Code Playgroud)

也可以选择编写

SELECT P.PersonName,
       Pt.PetName,
       Pa.AccessoryName
FROM   Persons P
       LEFT JOIN (Pets Pt
                  INNER JOIN PetAccessories Pa
                    ON Pt.PetName = Pa.PetName)
         ON P.PersonName = Pt.PersonName;
Run Code Online (Sandbox Code Playgroud)