题
目
描
述
:
\color{blue}题目描述:
题目描述:
获取所有员工的emp_no、部门编号dept_no以及对应的bonus类型btype和received ,没有分配具体的员工不显示
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 `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) 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`));
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));
create table emp_bonus(
emp_no int not null,
recevied datetime not null,
btype smallint not null);
输
入
描
述
:
\color{blue}输入描述:
输入描述:
无
输 出 描 述 : \color{blue}输出描述: 输出描述:
思
路
分
析
:
\color{blue}思路分析:
思路分析:
这题主要是要注意内、外连接的区分。所有员工都有dept_no,所以采用内连接,获取交集部分。有部分员工没有具体分配,但是又要显示所有员工,所以需要采用外连接,并且把employees
表作为主表。
代 码 实 现 : \color{blue}代码实现: 代码实现:
select e.emp_no,de.dept_no,eb.btype,eb.recevied
from employees e
#1、内连接,获取交集,无主从表之分
inner join dept_emp de on e.emp_no = de.emp_no
#2、左外连接,employees 表为主表
left join emp_bonus eb on e.emp_no = eb.emp_no;
博
客
推
荐
:
\color{blue}博客推荐:
博客推荐:
此题涉及到MySQL中的连接查询,请参考我的专栏:
MySQL从入门到精通之SQL99语法中的连接查询