题目:
有一个员工employees表简况如下:
有一个部门表,dept_emp简况如下:
请你查找所有已经分配部门的员工的last_name和first_name以及dept_no,未分配的部门的员工不显示,以上例子如下:
数据表:
表结构
代码语言:txt复制drop table if exists `employees` ;
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`));
数据:
insert语句
代码语言:txt复制INSERT INTO dept_emp VALUES(10001,'d001','1986-06-26','9999-01-01');
INSERT INTO dept_emp VALUES(10002,'d002','1996-08-03','9999-01-01');
INSERT INTO employees VALUES(10001,'1953-09-02','Georgi','Facello','M','1986-06-26');
INSERT INTO employees VALUES(10002,'1964-06-02','Bezalel','Simmel','F','1985-11-21');
INSERT INTO employees VALUES(10003,'1959-12-03','Parto','Bamford','M','1986-08-28');
INSERT INTO employees VALUES(10004,'1954-05-01','Chirstian','Koblick','M','1986-12-01');
解题思路:
- 此题是查询已经分配部门的员工信息,我们则直接去部门员工信息表查找到那些员工已经分配了部门。
- 查询到也已经分配了部门的员工编号,我们则根据编号直接到员工信息表中查找员工信息。
- 由于是查询已经分配了部门信息的员工,部分员工也没有分配部门,则不查询出来。我们则使用inner连接方式。这里也可以使用left连接方式。
参考答案:
- inner join连接方式。
select b.last_name, b.first_name, a.dept_no from dept_emp a
inner join employees b
on a.emp_no = b.emp_no;
- left join连接方式。
select b.last_name, b.first_name, a.dept_no from dept_emp a
left join employees b
on a.emp_no = b.emp_no;