首页 > 试题广场 >

查找所有员工的last_name和first_name以及对

[编程题]查找所有员工的last_name和first_name以及对
  • 热度指数:407959 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个员工表,employees简况如下:
emp_no 
birth_date 
first_name 
last_name 
gender hire_date 
10001
1953-09-02
Georgi     
Facello   
 M 1986-06-26
10002
1964-06-02
Bezalel    
Simmel    
 F 1985-11-21
10003  
1959-12-03
Parto      
Bamford   
 M 1986-08-28
10004  
1954-05-01
Christian  
Koblick   
 M 1986-12-01

有一个部门表,dept_emp简况如下:
emp_no
dept_no 
from_date 
to_date
10001 d001
1986-06-26 9999-01-01
10002 d002
1989-08-03 9999-01-01

请你查找所有已经分配部门的员工的last_name和first_name以及dept_no,也包括暂时没有分配具体部门的员工,以上例子如下:
last_name 
first_name 
dept_no
Facello    Georgi     
d001
Simmel     Bezalel    
d002
Bamford
Parto NULL
Koblick Chirstian NULL

示例1

输入

drop table if exists  `dept_emp` ; 
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 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');

输出

Facello|Georgi|d001
Simmel|Bezalel|d002
Bamford|Parto|None
Koblick|Chirstian|None
select emp.last_name,
    emp.first_name,
    dep.dept_no
from employees emp left join dept_emp dep
    on emp.emp_no = dep.emp_no

发表于 2024-04-28 10:05:39 回复(0)
select last_name, first_name, dept_emp.dept_no dept_no
from dept_emp left join employees
on dept_emp.emp_no = employees.emp_no
union all
select last_name, first_name, null as dept_no
from employees where emp_no not in (select emp_no from dept_emp)
发表于 2024-04-08 16:00:20 回复(0)
select a.last_name,a.first_name,b.dept_no
from employees a
left join dept_emp b
on a.emp_no=b.emp_no;

发表于 2024-02-05 21:36:46 回复(0)
select e.last_name,e.first_name,d.dept_no
from employees e
left join dept_emp d
on e.emp_no = d.emp_no;
发表于 2024-01-23 00:01:03 回复(0)
为什么不能用完全外连接呢 full join
发表于 2023-11-05 17:22:11 回复(0)
帮帮忙找不同,上边的代码不好使执行出错,下边的好使,给我逼疯了,找半个小时
SELECT e.last_name, e.first_name, d.dept_no
FROM employees e
LEFT JOIN dept_emp d 
ON e.emp_on = d.emp_no;


SELECT e.last_name, e.first_name, d.dept_no
FROM employees e
LEFT JOIN dept_emp d
ON e.emp_no = d.emp_no;


发表于 2023-10-19 16:37:44 回复(0)
select
    e.last_name last_name,
    e.first_name first_name,
    d.dept_no dept_no
from
    employees e
    left join dept_emp d on e.emp_no = d.emp_no;

思路:用外连接,employees 表为驱动表,这样可以保留 employees 表中不匹配的数据
发表于 2023-09-06 17:22:01 回复(0)
-- 请你查找所有已经分配部门的员工的last_name和first_name以及dept_no,也包括暂时没有分配具体部门的员工,以上例子如下:
-- 不能排序,否则结果错误;
select 
    t1.last_name ,
    t1.first_name ,
    t2.dept_no
from employees t1
left join dept_emp t2
on t1.emp_no = t2.emp_no
-- order by ifnull(t2.dept_no,'z999999999') asc
;

发表于 2023-08-14 15:40:08 回复(0)
select e.last_name,e.first_name,d.dept_no from employees e left  join dept_emp d on e.emp_no = d.emp_no;
运用左连接查询,显示出员工表中所有信息,以及部门表中符合条件的信息,并将部门表中符合的信息连接到员工表中展示出来
发表于 2023-07-13 16:23:48 回复(0)

【场景】:多表查询、列合并

【分类】:表连接join onjoin using

分析思路

难点:

1.如何灵活的使用多表查询语句

内连接和左右连接的区别和联系

连接查询 —— 左、右连接

MySQL多表查询,将查询到的列合并到一个表中使用join函数

具体包括:

连接类型(四者选一) 连接条件(三者选一)
left join natural
right join on <连接条件>
inner join using(col1,col2,...,coln)
full outer join

根据查询需要使用不同的连接类型和条件。其中col指列名(注意两个表的该列名必须相同)。

扩展

前往查看:MySQL 多表查询 查询出的不同列/行 合并到一个表中

求解代码

方法一:

join using

select
    last_name,
    first_name,
    dept_no
from employees left join dept_emp using(emp_no)

方法二:

join on

select
    last_name,
    first_name,
    dept_no
from employees a left join dept_emp b on a.emp_no = b.emp_no
发表于 2023-03-06 12:49:59 回复(0)
SELECT last_name ,first_name ,dept_no
FROM employees 
LEFT JOIN dept_emp 
USING(emp_no) 

发表于 2022-12-14 13:13:30 回复(0)
select 
    e.last_name,
    e.first_name,
    d.dept_no
from 
    dept_emp d right join employees e 
    on d.emp_no=e.emp_no  

发表于 2022-12-06 22:15:59 回复(0)
select last_name, first_name, dept_no from dept_emp right join employees using(emp_no);
发表于 2022-09-21 01:04:03 回复(0)
SELECT e.last_name, e.first_name, dept_no
FROM employees e
LEFT JOIN dept_emp USING(emp_no);

左外连接,左表未匹配到的记录的对应字段为空值。
发表于 2022-09-06 10:26:59 回复(0)
select last_name,first_name,dept_no 
from employees left join dept_emp on employees.emp_no=dept_emp.emp_no
发表于 2022-09-01 00:04:22 回复(0)
select e.last_name, e.first_name, d.dept_no from employees e left outer join dept_emp d on
e.emp_no = d.emp_no;

使用左连接

发表于 2022-08-13 22:34:46 回复(0)
select ey.last_name,ey.first_name,de.dept_no  from employees as ey
left join dept_emp as de on ey.emp_no =de.emp_no;
发表于 2022-08-06 10:43:31 回复(0)
select
  last_name,
  first_name,
  dept_no
from
  employees e
  left join dept_emp d on e.emp_no = d.emp_no
发表于 2022-08-04 13:29:28 回复(0)
select 
    last_name,
    first_name,
    dept_no
from employees a
left join dept_emp b
on a.emp_no=b.emp_no;
# 看到有空值就直接想用左关联,没什么好说的
发表于 2022-08-02 22:41:19 回复(0)
select last_name 名,first_name 姓,
(case when a.emp_no=b.emp_no then dept_no else '未分配' end) 员工编号
from employees a left join dept_emp b using(emp_no)
感觉这样写更符合题目的查询需求,虽然输出的答案和标准答案不一样 -。-



发表于 2022-07-10 10:52:40 回复(0)