天天看點

SQL語句-三表聯合查詢(查找所有員工的last_name和first_name以及對應的dept_name,也包括暫時沒有配置設定部門的員工)

序言

  • 最近做了一個三表聯合查詢的SQL語句練習題,覺得挺有意義的,是以這裡記錄一下。

題目如下:

查找所有員工的last_name和first_name以及對應的dept_name,也包括暫時沒有配置設定部門的員工

CREATE TABLE `departments` (
`dept_no` char(4) NOT NULL,
`dept_name` varchar(40) NOT NULL,
PRIMARY KEY (`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 連接配接emplyees表和dept_emp表,得到所有員工的last_name和first_name以及對應的dept_no,也包括暫時沒有配置設定部門的員工。
  • 第二次使用left join 連接配接上表與departments表,即連接配接dept_no和dept_name,得到所有員工的last_name和first_name以及對應的dept_name,也包括暫時沒有配置設定部門的員工。
select
  e.last_name,e.first_name,dp.dept_name
from
  emplyees e
left join
  dept_emp d
on
  e.emp_no = d.emp_no
left join
  departments dp
on 
  d.dept_no = dp.dept_no;