本文最后更新于:2022年4月9日 中午
题目描述
获取所有员工的emp_no、部门编号dept_no以及对应的bonus类型btype和received,没有分配奖金的员工不显示对应的bonus类型btype和received
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 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 `emp_bonus` ( emp_no int (11 ) NOT NULL , received datetime NOT NULL , btype smallint (5 ) NOT NULL );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` ));
输入描述
无
输出描述
e.emp_no
dept_no
btype
received
10001
d001
1
2010-01-01
10002
d001
2
2010-10-01
10003
d004
3
2011-12-03
10004
d004
1
2010-01-01
10005
d003
10006
d002
10007
d005
10008
d005
10009
d006
10010
d005
10010
d006
题解
select em.emp_no, de.dept_no, eb.btype, eb.received from employees as em inner join dept_emp as de on em.emp_no=de.emp_noleft join emp_bonus as eb on de.emp_no=eb.emp_no;
备注:
内连接是将一张表的每一条记录去另外一张表根据条件匹配;
外连接是将主表的记录去匹配从表的记录;
匹配成功保留
匹配失败(全表):也保留,只是从表字段置空