【问题标题】:somebody explain to me how this query works step by step?有人向我解释这个查询是如何一步一步地工作的?
【发布时间】:2019-12-12 06:24:52
【问题描述】:

这个SQL语句我还没看懂:

select FIRST_NAME 
from EMPLOYEES e 
where DEP_ID != (select DEP_ID 
                 from EMPLOYEES 
                 where e.MANAGER_ID = EMPLOYEE_ID);

【问题讨论】:

  • 它是一个关联子查询,对于外部查询中的每一行,都会执行where中的Select。

标签: sql database select


【解决方案1】:

我会把你的查询写成:

select e.FIRST_NAME 
from EMPLOYEES e 
where e.DEP_ID <> (select e2.DEP_ID 
                   from EMPLOYEES e2
                   where e.MANAGER_ID = e2.EMPLOYEE_ID
                  );

这不会在功能上更改查询,但它会限定所有列引用并使用&lt;&gt;,这是用于不等于的传统 SQL 运算符。

此查询的作用是返回部门与其经理部门不同的所有员工。

它是如何做到的?子查询是 correlated 子查询。对于employees 中的每一行,子查询返回经理的部门ID。

where 子句然后检查它是否与员工的经理匹配。

【讨论】:

    【解决方案2】:

    subquery 将获得经理的部门。

    select DEP_ID from EMPLOYEES where e.MANAGER_ID = EMPLOYEE_ID
    

    因此,主要查询将只获取非经理的员工。

    select FIRST_NAME from EMPLOYEES e where DEP_ID != (Managers dept_ID)
    

    【讨论】:

      【解决方案3】:

      它正在查找不属于特定经理的员工。 我们先看看内部:

      select DEP_ID from EMPLOYEES where e.MANAGER_ID = EMPLOYEE_ID
      

      这将获取特定经理下的部门 现在是外部:

      select FIRST_NAME from EMPLOYEES e where DEP_ID != <Departments under particular manager>
      

      现在结果将是不属于该经理的员工的名字列表

      【讨论】:

      • @FaroukDouglas 。 . .这个答案根本不正确。
      猜你喜欢
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      相关资源
      最近更新 更多