以下查询在哪里做什么?

时间:2016-01-22 21:44:04

标签: sql oracle11g oracle10g

SELECT
    COUNT(emp.empNo)
FROM
    Employee emp
WHERE
    NOT EXISTS (SELECT dept.empNo
                FROM department dept
                WHERE emp.empNo = dept.empNo);

where条件(其中emp.empNo = dept.empNo)在上述查询中表示什么?无论有没有条件,我都会得到不同的结果。我是Oracle的新手。任何人都可以帮助我理解吗?

4 个答案:

答案 0 :(得分:2)

您的查询显示在emp表中不存在但在dept表中显示的员工数。 假设我们有两个表emp和dept:

emp         dept
1             1
2             2
3             3
4             4   
5             5
              6
              7

从给定的表中我们在两个表中都有emp 1到5但是在dept表中有2个雇员(6,7),这些雇员在emp表中不存在而你的查询显示那些emp的计数,即2

答案 1 :(得分:0)

查询意味着您只查找那些不存在与员工的empNo具有相同empNo的部门的员工。

我想这是一个查询,以查找那些不是任何部门经理的员工(如果我们假设部门的empNo是部门经理的empNo)。

但是,如果您提供员工和部门表的架构会更好。

答案 2 :(得分:0)

该查询基本上是在寻找不属于某个部门的员工人数。

NOT EXISTS表示附带的查询不返回任何行。因此,对于在Department表中找不到匹配行的任何员工,他们都会被计算在内。

答案 3 :(得分:0)

与说

相同
SELECT
    COUNT(emp.empNo)
FROM
    Employee emp
WHERE
    emp.EmpNo NOT IN ( SELECT
                           empNo
                       FROM 
                           department)