【发布时间】:2017-08-28 10:50:27
【问题描述】:
假设我有一个表 EMPLOYEES,它有 100,000 行。
我有 DEPENDENTS 表,它有 200,000 行。
我可以从员工表中获取所有家属及其关系的列表(EMPLOYEES 有一个列 EMP_ID,它是 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
对比:
...
FROM DEPENDENTS D
LEFT JOIN EMPLOYEES E ON E.EMP_ID = D.PARENT_EMP_ID
请注意,我已经更改了条件的顺序,保留了表本身的顺序,因为我需要来自受抚养人的所有行(不在乎我是否从 EMPLOYEES 表中得到重复项)。
【问题讨论】:
-
完全没有区别
-
条件中是没有(逻辑)顺序。订单是
DEPENDENTS LEFT JOIN EMPLOYEES。反转 that 是一种语义变化。你如何写下你的情况不是。优化器不会基于此更改其计划。 -
如果您希望提高性能,请问问自己为什么要使用左连接而不是内连接。
-
我会感谢对我的问题投反对票的人来详细说明原因。我搜索了我的问题的答案,但在任何地方都找不到。
-
向下投票箭头的鼠标悬停文本包括“不显示任何研究工作”。您的问题绝对是基本的,您可以阅读任何介绍或谷歌重新选择、加入、执行、执行等以及您找到的单词。你没有说你可能意味着什么样的差异,例如逻辑评估顺序和查询返回什么,与性能差异。如果你搜索总结它和你发现了什么。说出您使用的参考资料。