我有2个表,emp和dept(员工和部门)。
假设我想显示每个部门的所有薪金总和,我可以使用类似以下内容的方法:
select sum(sal), deptno
from emp
group by deptno
现在可以用了,但是说列表中有一个没有员工的部门,我也希望它也出现,我该怎么做?我已经尝试了nvl函数joins,但是到目前为止还算运气。例如,这可行,但是不会显示空部门:
select sum(emp.sal), dept.deptno
from emp, dept
where emp.deptno=dept.deptno
group by dept.deptno
在此先感谢您的帮助!
最佳答案
LEFT JOIN
将达到目的:
select coalesce(sum(emp.sal),0), dept.deptno
from dept
left join emp on emp.deptno=dept.deptno
group by dept.deptno
您应该始终明确声明连接,以便在需要时可以更改它们。隐式连接始终为
INNER JOIN
。另外,我通过使用
0
将查询更改为在部门没有员工时显示NULL
而不是COALESCE
。