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

标签 sql oracle

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

select sum(sal), deptno
from emp
group by deptno

现在可以了,但是假设列表中有一个部门没有员工,我希望它也显示出来,我该怎么做?我试过连接,nvl 函数,但到目前为止运气不好。例如,这有效,但不会显示空部门:

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

此外,当部门没有员工时,我使用 COALESCE 更改查询以显示 0 而不是 NULL

关于sql - 连接表时如何显示未使用的外键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7667073/

相关文章:

java - 计数 (*) 位于另一个计数 (*) 内

php - 如何从Firebird数据库读取数据并将数据插入MSSQL数据库?

sql - 如果存在匹配项,则仅选择包含 COLUMN=<value> 的行,否则选择 COLUMN IS NULL

oracle - 为什么 oracle 选择索引范围扫描而不是快速完整索引扫描

sql - 何时使用存储过程而不是嵌入式 SQL

sql - 来自 Postgres 存储过程的意外 OUT 值

sql - 循环值、创建动态查询并添加到结果集

Oracle 使用取自函数值的 like 比较

sql - 最小传输Sql查询

sql - 当行不存在时, "SELECT FOR UPDATE"是否会阻止其他连接插入?