当我们颠倒 LEFT JOIN 条件中键的顺序时会发生什么?
连接两个表的理想 SQL 左连接语法是
select fields
from tableA
LEFT JOIN tableB
ON tableA.key = tableB.key
连接条件的顺序翻转
select fields
from tableA
LEFT JOIN tableB
ON tableB.key = tableA.key -- (order flipped)
这些查询会产生不同的结果集吗?
您将得到相同的结果。 on 子句仅计算 true 或 false;顺序并不重要。
只有桌子本身的位置很重要。例如如下颠倒表格顺序会产生不同的结果。
select fields
from tableB
LEFT JOIN tableA
ON tableA.key = tableB.key
LEFT JOIN
不可交换,不能切换参数:tableA LEFT JOIN tableB
等价于 tableB RIGHT JOIN tableA
,但与 tableB LEFT JOIN tableA
不同。
==
是可交换的,您 可以 切换参数:tableA.key = tableB.key
相当于 tableB.key = tableA.key
。
除了查询的可读性之外,没有任何区别。
SQL 被设计为像通常的英文文本一样可读。在通常的文本中,当我们想要指定任何提到的对象时,我们会说类似“一个对象。这个对象就像那个对象,这个对象与那个对象相关,并且这个对象具有这些属性。”我们不这样做说 “那个对象就像这个对象,与这个对象相关的那个对象,并且那些属性具有这个对象”。
因此,当我们从 TableB 的记录中添加一条数据来查询 TableA 时,我们需要指定必须有 TableB 中的一条记录才能满足 TableA 中的当前记录。所以我们必须说,我们需要 TableB 中的记录,它的 id 等于 TableA 中的 id。 TableB.id = TableA.id
。我们希望完全按照这个顺序编写,以确保易于阅读和理解这种关系。