我还不了解以下SQL语句:
select FIRST_NAME
from EMPLOYEES e
where DEP_ID != (select DEP_ID
from EMPLOYEES
where e.MANAGER_ID = EMPLOYEE_ID);
答案 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
子句检查它是否与员工的经理匹配。