sql - FROM CLAUSE (SQL) 中的此 SQL 语句中的括号是做什么的

标签 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 .....

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

期待您的回复。 编辑:行错了

最佳答案

在这种情况下没有任何内容,因为内部联接是关联的和可交换的。

一般来说,您可以通过移动 on 子句的位置来更改参与连接的虚拟表,这也可以应用可选的括号,希望让事情变得更清楚。

所以 for example你可以

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;

也可以选择写入

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;

关于sql - FROM CLAUSE (SQL) 中的此 SQL 语句中的括号是做什么的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36900883/

相关文章:

sql - 从临时表插入表

通过连接SQL更新表?

sql - 在 SQL/数据库级别计算夏令时 (DST)

sql - 记录 SQL Server 2008 Express 数据库上的所有查询?

sql-server - 将本地 SQL Server 数据库数据以 Parquet 格式复制到 Azure

sql - 如何在 SQL 语句语法中执行内联 if-then

sql - 索引 View 和执行计划

SQL Server 以用户身份执行过程

sql - 找出哪些表受触发器影响

sql-server - 无法通过 SQL Server Management Studio 连接到 SQL Server Linux Docker 容器