MySQL练习十二:查找所有已经分配部门的员工的last_name和first_name以及dept_no

卡二条的技术圈

共 1733字,需浏览 4分钟

 ·

2021-09-21 16:07

题目:有一个员工employees表简况如下:

2DD8A8D108E674BCB32D6E32B03492C1

有一个部门表,dept_emp简况如下:

4BF7C729BECEE5D9215DF0C0B22855A0

请你查找所有已经分配部门的员工的last_name和first_name以及dept_no,未分配的部门的员工不显示,以上例子如下:

92EDD0ECE3222E00AE2F555AC9153034

数据表:表结构

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语句

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');

解题思路:

  1. 此题是查询已经分配部门的员工信息,我们则直接去部门员工信息表查找到那些员工已经分配了部门。

  2. 查询到也已经分配了部门的员工编号,我们则根据编号直接到员工信息表中查找员工信息。

  3. 由于是查询已经分配了部门信息的员工,部分员工也没有分配部门,则不查询出来。我们则使用inner连接方式。这里也可以使用left连接方式。

参考答案:

  1. 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;
  1. 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;

推荐试题:

  1. MySQL练习十一:查找当前薪水详情以及部门编号dept_no

  2. MySQL练习十:查找入职员工时间排名倒数第三的员工所有信息

  3. MySQL练习九:查找最晚入职员工的所有信息


浏览 61
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报