有人一步一步地向我解释这个查询是如何工作的?



我还不明白这个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 运算符,表示不等于。

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

它是如何做到这一点的? 子查询是相关的子查询。 对于employees 中的每一行,子查询返回经理的部门 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>

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

最新更新