只要我们选择正确的连接类型,连接表的顺序是不是无所谓?
Posted
技术标签:
【中文标题】只要我们选择正确的连接类型,连接表的顺序是不是无所谓?【英文标题】:Is the order of joining tables indifferent as long as we chose proper join types?只要我们选择正确的连接类型,连接表的顺序是否无所谓? 【发布时间】:2015-04-29 21:32:37 【问题描述】:我们可以通过以任何顺序执行连接来达到连接表的预期结果吗?假设我们要左连接两个表 A 和 B(顺序 AB)。我们可以通过右连接 B 和 A (BA) 得到相同的结果。
3张桌子ABC怎么样。我们可以通过仅更改顺序和连接类型来获得任何结果吗?比如A left join B inner join C 可以用BAC order 得到吗?如果我们有 4 个或更多表呢?
更新。 问题Does the join order matter in SQL? 是关于内部连接类型的。同意然后加入的顺序无关紧要。该问题中提供的答案没有回答我的问题,是否有可能通过选择 whatever 表顺序来获得使用 whatever original join types (join types here) 连接表的预期结果我们喜欢,并且只能通过使用连接类型来实现这个目标。
【问题讨论】:
不确定您要完成什么。通常情况下,逻辑上更容易理解的方法是有效的。为了简洁起见,甚至将事物分解为 CTE 或子查询比创建“完美”查询更可取。从“一个”点开始,使用有意义的连接。 可以更改顺序并获得相同的结果。您可以使用(
和)
来消除歧义。
“A 左连接 B 内连接 C”与“B 右连接 A 内连接 C”相同。大多数人发现左连接更容易理解。
@Salman 有必要使用括号吗?是否可以在不使用括号的情况下通过仅使用连接类型来实现目标(更改表顺序)?
@PrzemyslawRemin 见***.com/questions/9614922/…
【参考方案1】:
在内部联接中,联接中表的顺序无关紧要 - 相同的行将构成结果集,无论它们在联接语句中的顺序如何。
在左外连接或右外连接中,顺序很重要。在 A 左连接 B 中,您的结果集将包含表 A 中的每条记录的一行,而不管表 B 中是否存在匹配行。如果存在不匹配的行,这很可能是与 B 不同的结果集左加入A。
在完全外连接中,顺序再次无关紧要 - 将为每个连接表中的每一行生成行,无论它们的顺序如何。
关于 A 左连接 B 与 B 右连接 A - 这些将产生相同的结果。在具有 2 个表的简单情况下,交换表并更改外连接的方向将产生相同的结果集。
如果所有外连接都在同一方向上,这也适用于 3 个或更多表 - A 左连接 B 左连接 C 将提供与 C 右连接 B 右连接 A 相同的结果集。
如果您开始混合左右连接,那么您将需要开始更加小心。几乎总有一种方法可以对重新排序的表进行等效查询,但此时子查询或括号括起来可能是阐明您在做什么的最佳方式。
正如另一位评论者所说,使用任何能让你的目的最明确的东西通常是最好的选择。查询中表的顺序应该对性能产生很小或没有影响,因为查询优化器应该解决这个问题(尽管确保这一点的唯一方法是使用您自己的查询检查每个选项的执行计划和数据)。
【讨论】:
以上是关于只要我们选择正确的连接类型,连接表的顺序是不是无所谓?的主要内容,如果未能解决你的问题,请参考以下文章
未找到或无法访问服务器。请验证实例名称是不是正确并且 SQL Server 已配置为允许远程连接。 (provider: 命