我有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

10-01 08:32