【问题标题】:What does where do in the below query?以下查询中的 where 是做什么的?
【发布时间】:2016-01-22 21:44:03
【问题描述】:
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)在上述查询中表示什么?无论有无 where 条件,我都会得到不同的结果。我是甲骨文的新手。谁能帮我理解一下?

【问题讨论】:

  • 这称为关联子查询。

标签: sql oracle11g oracle10g


【解决方案1】:

您的查询显示了 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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      NOT EXISTS 表示包含的查询不返回任何行。因此,对于在 Department 表中未找到匹配行的任何员工,都会对其进行计数。

      【讨论】:

        【解决方案4】:

        和你说的一样

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

        【讨论】:

        • 我也是这么想的。但是这两个查询都返回了不同的结果。我想知道在上面的查询中条件“emp.empNo = dept.empNo”有什么不同。
        • 空值在使用not in时会影响结果。empno字段可以为空吗?
        猜你喜欢
        • 1970-01-01
        • 2023-02-07
        • 2020-09-25
        • 2022-09-27
        • 2014-04-19
        • 1970-01-01
        • 2020-05-15
        • 2021-07-16
        • 2020-04-14
        相关资源
        最近更新 更多