题目描述
查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括展示没有分配具体部门的员工
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
解题思路
需要对表进行左外连接,借助LEFT JOIN ON
进行,这里给出JOIN ON
和WHERE
的区别:
LEFT JOIN ON
不论ON
中的条件是否是真,都会返回整个左表,而WHERE
会对左表进行过滤,然后返回。这个题目中,因为会有没分配部门的员工,所以得用左外连接,借助ON
实现。
AC代码
SELECT e.last_name, e.first_name, d.dept_no FROM
employees AS e LEFT JOIN dept_emp AS d ON e.emp_no = d.emp_no