首页 > 解决方案 > SQL Join 查询执行的顺序是什么?

问题描述

当我们有多个 Join 查询,Derived table join 查询和 finally where 条件时,SQL Join 查询执行的顺序是什么?

哪个代码块将首先(或)执行 SQL 中的最外层代码块还是最内层代码块?

select 
  TablePerson.PersonName, TablePet.PetName, TablePet.PetType
from 
  TablePerson
left outer join 
(
  select TablePet.ownerID, TablePet.PetName, TableTypes.PetType
  from TablePet 
  inner join TableTypes on TablePet.PetTypeID = TableTypes.TypeID
) 
  TablePet
on
  TablePet.OwnerID = TablePerson.PersonID

标签: sqlsql-servertsql

解决方案


SQL 是一种声明性语言,而不是过程性语言。SQL 查询代表结果集,而不是生成它的特定操作。

SQL 在处理查询时基本上分为三个步骤:

  • 解析查询
  • 优化查询以生成数据的最佳执行计划
  • 执行查询

取决于数据和环境,完全相同的查询在不同时间可能有不同的执行计划。

理解这一点非常重要。您无法指定执行计划是什么。优化器确定 - 无论 CTE 和子查询如何。您可以通过在查询中提供提示来影响执行计划。


推荐阅读