sql - 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
解决方案
SQL 是一种声明性语言,而不是过程性语言。SQL 查询代表结果集,而不是生成它的特定操作。
SQL 在处理查询时基本上分为三个步骤:
- 解析查询
- 优化查询以生成数据的最佳执行计划
- 执行查询
取决于数据和环境,完全相同的查询在不同时间可能有不同的执行计划。
理解这一点非常重要。您无法指定执行计划是什么。优化器确定 - 无论 CTE 和子查询如何。您可以通过在查询中提供提示来影响执行计划。
推荐阅读
- svn - TortoiseSVN:文件在日志中标记为“修改”和“添加”
- android - Android首选项屏幕主题不起作用
- python - 使用python分隔列
- elasticsearch - 我想在 Elastic Search 的数组中搜索字段
- javascript - 通过反应应用为所有图像设置基本路径
- google-sheets - 从谷歌表格生成谷歌文档模板?
- regex - 用于匹配纬度、经度的正则表达式,没有任何字符
- sql - 无法列出在特定月份和年份处理最多约会的员工
- javascript - 当用户重新加载页面时,他无法获取存储在后端数组中的信息
- python - 如何在Python中列表的偶数位置添加值