題目描述
查找所有員工的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的右邊,我想讓他全部展示,就用右連接