如何在连接表时显示未使用的外键值

Ren*_*ene 2 sql oracle

我有2个表,emp和dept(员工和部门).假设我想显示每个部门所有工资的总和,我可以使用类似的东西:

select sum(sal), deptno
from emp
group by deptno
Run Code Online (Sandbox Code Playgroud)

现在这样有效,但是说列表中有一个没有员工的部门,我也想让它出现,我该怎么做?我已经尝试了连接,nvl函数,但到目前为止没有运气.例如,这可行,但它不会显示空部门:

select sum(emp.sal), dept.deptno
from emp, dept
where emp.deptno=dept.deptno
group by dept.deptno
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助!

Adr*_*iro 6

LEFT JOIN 会做的伎俩:

select coalesce(sum(emp.sal),0), dept.deptno
from dept 
left join emp on emp.deptno=dept.deptno
group by dept.deptno
Run Code Online (Sandbox Code Playgroud)

您应该始终明确声明您的联接,以便您可以在需要时更改它们.隐式连接总是如此INNER JOIN.

此外,通过使用,我将查询更改为显示0而不是NULL部门没有员工COALESCE.

  • 从技术上讲,答案应该是"一个*外部*联盟将成功".`LEFT JOIN`(`LEFT OUTER JOIN`的简写)是一种外连接.另外两个是"RIGHT OUTER JOIN"和"FULL OUTER JOIN".有关外连接的详细信息[维基百科页面](http://en.wikipedia.org/wiki/Join_(SQL)#Outer_joins)提供了相当不错的摘要. (2认同)