select last_name from employees join departments on employees.department_id = departments.department_id where department_name='Executive';
select last_name from employees where department_id in
(select department_id from departments where department_name='Executive');
这两个 SQL 语句的目标都是返回在 'Executive' 部门工作的员工的 last_name。让我们逐一分析这两个查询。
第一个查询使用了内连接(JOIN):
1SELECT last_name 2FROM employees 3JOIN departments 4ON employees.department_id = departments.department_id 5WHERE department_name = 'Executive';
这个查询直接从 departments 表中筛选出 department_name 为 'Executive' 的记录,并且只返回那些在 employees 和 departments 表中匹配到的记录。
第二个查询使用了一个子查询(IN 子句):
1SELECT last_name 2FROM employees 3WHERE department_id IN ( 4 SELECT department_id 5 FROM departments 6 WHERE department_name = 'Executive' 7);
这个查询首先找出所有 department_name 为 'Executive' 的 department_id,然后从 employees 表中选择那些 department_id 在这个列表中的员工。
这两个语句的逻辑是等效的,都是先找出department_name为'Executive'的部门的department_id,然后在employees表中根据department_id找出对应的员工的last_name。
如果有两个部门名称是'Executive',只要它们的department_id是不同的,那么这两个语句也会正常运行并产生正确的结果,因为查询是基于department_id进行的,而不是部门名称的唯一性。




