更改JOIN ON条件的顺序是否有所不同?

时间:2017-08-28 10:50:27

标签: sql join left-join

假设我有一个包含100,000行的表EMPLOYEES。 我有DEPENDENTS表,其中有200,000行。

我可以从员工表中获取所有受抚养人及其关系的列表(EMPLOYEES有一列EMP_ID,这是[{1}}中的外键,名称为DEPENDENTS )。

PARENT_EMP_ID

我的问题是: 如果我像这样加入表格会有什么不同:

SELECT
    D.FIRST_NAME,
    D.LAST_NAME,
    E.EMPLOYEE_NAME AS DEPENDENT_OF
 FROM
    DEPENDENTS D
    LEFT JOIN EMPLOYEES E ON D.PARENT_EMP_ID = E.EMP_ID

...
FROM DEPENDENTS D 
LEFT JOIN EMPLOYEES E ON D.PARENT_EMP_ID = E.EMP_ID

注意,我已经改变了条件的顺序,保留了表本身的顺序,因为我需要来自dependents的所有行(如果我从EMPLOYEES表中得到重复项,则不关心)。

2 个答案:

答案 0 :(得分:1)

任何逻辑连接都将转换为以下物理连接之一..

  • 嵌套循环
  • 哈希联接
  • 合并加入

对于所有上述物理连接,每个都以不同的方式实现,并且更改条款就像您更改的方式无关紧要

以下加入你有..

E.EMP_ID = D.PARENT_EMP_ID

如果我们假设,SQL为您的查询选择了散列连接。在这种情况下,sql选择具有较少行的表作为构建表,并且它将使用此表来探测其他表..

即使您更改了联接,也没关系

答案 1 :(得分:-1)

不,根本没有变化,因为表DEPENDENTS的元素与表EMPLOYEES的元素进行比较,在两种情况下都将DEPENDENTS表保留为基表,因此条件的顺序无关紧要。但是如果基表的顺序改变了,那么两种情况的结果都会不同。