如何从此查询中选择其他部门

时间:2015-03-27 22:12:59

标签: sql oracle

所以我有以下查询

SELECT deptno, COUNT(deptno) number_of_jobs
            FROM emp
            WHERE job = 'SALESMAN'
            GROUP BY deptno
            ORDER BY number_of_jobs ASC;

这样做的目的是让我回到30号部门,而我也想要部门10和20。

喜欢这个

deptno  number_of_jobs
    10  (here it can be null or 0 doesn't really matter)
    20  (same like dept 10)
    30  4

我知道这很容易,我相信它是使用连接条件完成的,但我无法理解它。

谢谢你们!

1 个答案:

答案 0 :(得分:2)

您需要使用部门表LEFT JOIN这个。 LEFT JOIN返回左表中的所有行,即使它们在右表中没有匹配项。

SELECT d.deptno, COUNT(e.deptno) number_of_jobs
FROM dept d
LEFT JOIN emp e ON e.deptno = d.deptno AND e.job = 'SALESMAN'
GROUP BY d.deptno
ORDER BY number_of_jobs ASC

请注意,您必须使用COUNT(e.deptno)而不是COUNT(*),否则它将使用emp表中的空值计算行。当您为COUNT提供列名时,它只会计算该列的非空值,因此对于没有匹配的行,您将获得0