有人向我解释此查询如何逐步进行?

时间:2019-12-12 06:24:52

标签: sql database select

我还不了解以下SQL语句:

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

3 个答案:

答案 0 :(得分:0)

subquery将获得经理的部门。

select DEP_ID from EMPLOYEES where e.MANAGER_ID = EMPLOYEE_ID

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

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

答案 1 :(得分:0)

找到不在特定经理之下的员工。 我们先来看一下内部:

select DEP_ID from EMPLOYEES where e.MANAGER_ID = EMPLOYEE_ID

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

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

现在结果将显示不在该经理下的员工的名字列表

答案 2 :(得分:0)

我将您的查询写为:

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
                  );

这不会在功能上更改查询,但会限定所有列引用并使用<>,这是传统的SQL操作符,用于不等于。

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

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

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