SELECT department_name AS dept_name,
last_name, project_number
FROM departments dpt
JOIN employee emp
ON dpt.department_number = emp.department_number
LEFT JOIN projects prj
ON emp.employee_id = prj.employee_id
ORDER BY department_name
所以我对LEFT JOIN部分以及它是如何工作感到困惑,因为它是第二个连接。是“左”表员工还是部门?
答案 0 :(得分:7)
“左”方实际上是加入departments
和employee
的结果。联接是左关联的,因此x JOIN y JOIN z
等同于(x JOIN y) JOIN z
。
答案 1 :(得分:3)
这两者都是。或者,“左”侧是连接之前的连接表达式的结果。
实际上,查询优化器可能会对某些内容进行重新排序。但是从逻辑的角度来看,假设查询从开始到结束一次一个地运行每个表达式,每个新的连接表达式使用到目前为止为操作的左侧计算的整个结果。优化器可能决定交换两个连接,或者从之前的where子句应用过滤器,但它永远不会以改变结果关系的方式执行此操作。
答案 2 :(得分:0)
此查询假设每个部门至少有一名员工,而员工将拥有零个或多个项目。