题目描述
查找所有员工的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
));
思路:
两张表的查询问题,需要连接,但这里的关键点是包括没有分配具体部门的员工,那我的理解是employees表中的ast_name和first_name都需要展示,然后再把dept_emp表中有部门的值展示出来就好,它不是一个可以影响employees表的条件,所有不能用内连接,应该用左(右)连接
代码:
select employees.last_name,employees.first_name,dept_emp.dept_no
from employees left join dept_emp
on employees.emp_no = dept_emp.emp_no;
输出描述
知识点:
左右连接的使用其实非常简单,下面三句总结:
1、哪个表要全部展示,就看"没有"“全部”这样的字修饰哪个表.
2、如果想用左连接让该表全部展示,那么就将他放在join的左边,如果想用右连接让该表全部展示,那么就将他放在join的右边.
3、如果表在join的左边,我想然他全部展示,就用左连接,如果表在join的右边,我想让他全部展示,就用右连接