我还不明白这个SQL语句:
select FIRST_NAME
from EMPLOYEES e
where DEP_ID != (select DEP_ID
from EMPLOYEES
where e.MANAGER_ID = EMPLOYEE_ID);
我会把你的查询写成:
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 运算符,表示不等于。
此查询的作用是返回其部门与其经理部门不同的所有员工。
它是如何做到这一点的? 子查询是相关的子查询。 对于employee
s 中的每一行,子查询返回经理的部门 ID。
然后,where
子句检查它是否与员工的经理匹配。
此subquery
将获取经理的部门。
select DEP_ID from EMPLOYEES where e.MANAGER_ID = EMPLOYEE_ID
因此,主要查询只会获得不是经理的员工。
select FIRST_NAME from EMPLOYEES e where DEP_ID != (Managers dept_ID)
它找到不属于特定经理的员工。 我们先来看看内部:
select DEP_ID from EMPLOYEES where e.MANAGER_ID = EMPLOYEE_ID
这将获取特定经理下的部门 现在外部部分:
select FIRST_NAME from EMPLOYEES e where DEP_ID != <Departments under particular manager>
现在的结果将是不在该经理下的员工名字列表