2016-01-22 70 views
1
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新手。任何人都可以帮助我理解吗?在下面的查询中做什么?

+0

这称为共同相关子查询。 –

回答

0

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

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

尽管如此,如果您提供员工和部门表格的模式会更好。

0

查询基本上是查找不属于某个部门的员工数量。

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

0

等于说

SELECT 
    COUNT(emp.empNo) 
FROM 
    Employee emp 
WHERE 
    emp.EmpNo NOT IN (SELECT 
          empNo 
         FROM 
          department) 
+0

我也这么认为..但这两个查询都返回不同的结果。我想知道在上述查询中'emp.empNo = dept.empNo'的条件有什么不同。 – user2633915

+0

不使用时,空值可能会影响结果。可以使用empno字段为空吗? – JamieD77

2

查询显示雇员中不存在EMP表的,但目前在dept表的计数。 假设我们有两个表EMP和DEPT:从给定的表

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

我们在两个表的,但在具有dept表具有EMP二月一日至5日员工(6,7),其不存在于EMP表和您的查询显示计数为那些emp即2

相关问题