MySQL练习四:查询已经分配部门员工的姓名和部门编号

2021-09-22 11:15:14 浏览数 (1)

题目:

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

2DD8A8D108E674BCB32D6E32B03492C12DD8A8D108E674BCB32D6E32B03492C1

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

4BF7C729BECEE5D9215DF0C0B22855A04BF7C729BECEE5D9215DF0C0B22855A0

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

92EDD0ECE3222E00AE2F555AC915303492EDD0ECE3222E00AE2F555AC9153034

数据表:

表结构

代码语言: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');

解题思路:

  1. 此题是查询已经分配部门的员工信息,我们则直接去部门员工信息表查找到那些员工已经分配了部门。
  2. 查询到也已经分配了部门的员工编号,我们则根据编号直接到员工信息表中查找员工信息。
  3. 由于是查询已经分配了部门信息的员工,部分员工也没有分配部门,则不查询出来。我们则使用inner连接方式。这里也可以使用left连接方式。

参考答案:

  1. inner join连接方式。
代码语言:txt复制
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连接方式。
代码语言:txt复制
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;

0 人点赞