我对SQL 语句的执行顺序存在疑问,特别是在相关表的联合中。FROM
首先执行after 子句ON
并在INNER JOIN
每个表之后执行?如果有人可以启发我,因为我经常在查询中得到错误的结果,并且我想了解这部分执行顺序。谢谢大家。
SELECT h.SalesOrderID,
h.OrderDate,
h.SalesOrderNumber,
h.TotalDue,
d.ProductID,
d.LineTotal,
p.Name
FROM AdventureWorks.Sales.SalesOrderHeader AS h
INNER JOIN AdventureWorks.Sales.SalesOrderDetail AS d
ON h.SalesOrderID = d.SalesOrderID
INNER JOIN AdventureWorks.Production.Product AS p
ON d.ProductID = p.ProductID
了解查询的顺序和成本的最佳方式是通过 Sql Management Studio 提供的执行计划工具。这里有官方文档,但我放了一个与您类似的查询的简单示例供您查看:
激活执行计划并执行查询后,我看到以下内容(从右到左阅读):
如您所见,它首先将“Jornadas”和“JornadaSesiones”连接到结果,在通过 WHERE 搜索过滤后将连接与“Sessiones”一起应用(如果仔细观察,它会显示 Search in index 而不是 Exam in index ) 并在结果上应用 SELECT。
该工具本身提供了更多功能,但它可用于了解您的要求。