我们需要从员工表中找出所有没有在部门领导表中出现的员工编号。我们要做的事情如下:
1. 确定总体问题
这道题目要求我们找出所有不是部门领导的员工编号。我们需要从员工表和部门领导表中提取数据,通过员工编号进行左连接,以确保即使没有部门信息的员工也能被列出,然后筛选出那些没有部门领导记录的员工。
2. 分析关键问题
- 左连接表:将
employees
和dept_manager
表进行左连接,以便获取每个员工的部门领导信息。 - 筛选非部门领导的员工:找出那些没有部门领导记录的员工。
3. 解决每个关键问题的代码及讲解
步骤1:左连接表
我们使用LEFT JOIN
将employees
和dept_manager
表连接起来:
from
employees e
left join dept_manager d on e.emp_no = d.emp_no
LEFT JOIN dept_manager d ON e.emp_no = d.emp_no
:通过员工编号进行左连接,以确保即使没有部门信息的员工也能被列出,左连接之后空着的dept_no会默认为null,即员工数据行。
步骤2:筛选非部门领导的员工
我们使用WHERE
子句筛选出没有部门领导记录的员工:
where
dept_no is null
WHERE dept_no IS NULL
:筛选出那些没有在部门领导表中出现的员工。
完整代码
select
e.emp_no
from
employees e
left join dept_manager d on e.emp_no = d.emp_no
where
dept_no is null;