我们需要从员工表中找出所有没有在部门领导表中出现的员工编号。我们要做的事情如下:

1. 确定总体问题

这道题目要求我们找出所有不是部门领导的员工编号。我们需要从员工表和部门领导表中提取数据,通过员工编号进行左连接,以确保即使没有部门信息的员工也能被列出,然后筛选出那些没有部门领导记录的员工。

2. 分析关键问题

  • 左连接表:将employeesdept_manager表进行左连接,以便获取每个员工的部门领导信息。
  • 筛选非部门领导的员工:找出那些没有部门领导记录的员工。

3. 解决每个关键问题的代码及讲解

步骤1:左连接表

我们使用LEFT JOINemployeesdept_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;