Sql 改变联接条件中表的顺序

Sql 改变联接条件中表的顺序,sql,join,Sql,Join,鉴于以下情况: 表A有1000行,表B有5000行 Q1:从表A左外部联接表B中选择* 条件 Q2:从表_B左侧外部联接表_A中选择* 条件 这有什么区别吗?在这些情况下会有任何性能差异吗?是的,对于左连接来说会有很大的差异。这两条语句不同,执行路径也可能不同 Q1: Select * from Table_A Left Outer Join Table_B ON condition 第一个查询保留表A中的所有行,以及表B中的任何匹配值。因此,此版本至少返回1000行 第二个保留表B中的所有行

鉴于以下情况:

表A有1000行,表B有5000行

Q1:从表A左外部联接表B中选择* 条件

Q2:从表_B左侧外部联接表_A中选择* 条件

这有什么区别吗?在这些情况下会有任何性能差异吗?

是的,对于
左连接来说会有很大的差异。这两条语句不同,执行路径也可能不同

Q1: Select * from Table_A Left Outer Join Table_B ON condition
第一个查询保留表A中的所有行,以及表B中的任何匹配值。因此,此版本至少返回1000行

第二个保留表B中的所有行,以及表A中的任何匹配值。这不是一回事。此版本至少返回5000行


对于
内部联接
(或
完全外部联接
),则
FROM
子句中表的顺序不会影响结果集。但是,根据优化器的不同,它可能会影响联接的处理方式(我认为是优化器走捷径的长联接链)。

这两个查询将产生不同的结果

然后转到“自己尝试”页面。可以为左外部联接编辑SQL

这有什么区别吗

是的<代码>左联接
定义:返回左表中的所有行+两个表中匹配的行。匹配行表示两个表的交集

因此,在您的情况下,返回的行数将非常不同

Q1: Select * from Table_A Left Outer Join Table_B ON condition
在这种情况下,返回的行数将是
1000
(因为
table a
有1000行,并且在
JOIN
的左侧)加上匹配项(表之间的交集)

在这种情况下,返回的行数将是
5000
(因为
table b
有5000行,并且在
JOIN
的左侧)加上匹配项(表之间的交集)

查看相同[图像取自]的视觉表示:


您正在使用哪个数据库?MS Access?嗨,John,我问的是任何数据库。性能是DBMS特有的,因此我们无法回答这部分问题,除非您告诉我们是哪一部分。谢谢您的回复John..谢谢您的解释。但是这里会有很大的性能差异吗。。?左侧行数较少的表获取速度更快??请不要引用W3学校。他们因信息不准确而臭名昭著。看,我把他引导到了“自己尝试”页面,这将允许OP自己尝试并看到差异。这就是我的意图。谢谢:)但是这里会有很大的性能差异吗。。?左侧行数较少的表获取速度更快??