首页 > 试题广场 >

查询培训指定课程的员工信息

[编程题]查询培训指定课程的员工信息
  • 热度指数:41750 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
某公司员工信息数据及员工培训信息数据如下:
员工信息表staff_tb(staff_id-员工id,staff_name-员工姓名,staff_gender-员工性别,post-员工岗位类别,department-员工所在部门),如下所示:
staff_id staff_name staff_gender post department
1 Angus male Financial dep1
2 Cathy female Director dep1
3 Aldis female Director dep2
4 Lawson male Engineer dep1
5 Carl male Engineer dep2
6 Ben male Engineer dep1
7 Rose female Financial dep2
员工培训信息表cultivate_tb(info_id-信息id,staff_id-员工id,course-培训课程),如下所示:
注:该公司共开设了三门课程,员工可自愿原则性培训0-3项;
info_id staff_id course
101 1 course1, course2
102 2 course2
103 3 course1, course3
104 4 course1, course2, course3
105 5 course3
106 6 NULL
107 7 course1, course2
问题:请查询培训课程course3的员工信息?
注:只要培训的课程中包含course3课程就计入结果
要求输出:员工id、姓名,按照员工id升序排序;
示例数据结果如下:
staff_id staff_name
3 Aldis
4 Lawson
5 Carl

解释:有员工3、4、5培训了course3课程,故结果如上
示例1

输入

drop table if exists  `staff_tb` ; 
CREATE TABLE `staff_tb` (
`staff_id` int(11) NOT NULL,
`staff_name` varchar(16) NOT NULL,
`staff_gender` char(8) NOT NULL,
`post` varchar(11) NOT NULL,
`department` varchar(16) NOT NULL,
PRIMARY KEY (`staff_id`));
INSERT INTO staff_tb VALUES(1,'Angus','male','Financial','dep1'); 
INSERT INTO staff_tb VALUES(2,'Cathy','female','Director','dep1'); 
INSERT INTO staff_tb VALUES(3,'Aldis','female','Director','dep2'); 
INSERT INTO staff_tb VALUES(4,'Lawson','male','Engineer','dep1'); 
INSERT INTO staff_tb VALUES(5,'Carl','male','Engineer','dep2'); 
INSERT INTO staff_tb VALUES(6,'Ben','male','Engineer','dep1'); 
INSERT INTO staff_tb VALUES(7,'Rose','female','Financial','dep2'); 

drop table if exists  `cultivate_tb` ;   
CREATE TABLE `cultivate_tb` (
`info_id` int(11) NOT NULL,
`staff_id` int(11) NOT NULL,
`course` varchar(32) NULL,
PRIMARY KEY (`info_id`));
INSERT INTO cultivate_tb VALUES(101,1,'course1,course2');
INSERT INTO cultivate_tb VALUES(102,2,'course2');
INSERT INTO cultivate_tb VALUES(103,3,'course1,course3');
INSERT INTO cultivate_tb VALUES(104,4,'course1,course2,course3');
INSERT INTO cultivate_tb VALUES(105,5,'course3');
INSERT INTO cultivate_tb VALUES(106,6,NULL);
INSERT INTO cultivate_tb VALUES(107,7,'course1,course2');

输出

staff_id|staff_name
3|Aldis
4|Lawson
5|Carl
头像 牛客题解官
发表于 2025-02-18 10:56:07
精华题解 这道题目要求我们查询参加了特定培训课程的员工信息。下面是这个SQL查询的思路和实现步骤。 1. 确定总体问题 我们需要找出参加了course3课程的员工,并输出他们的员工ID和姓名,按员工ID升序排序。 2. 分析关键问题 连接表:我们需要将staff_tb和cultivate_tb表连接起来,以 展开全文
头像 Lateral
发表于 2025-03-03 16:01:06
select c.staff_id, s.staff_name from cultivate_tb c left join staff_tb s on c.staff_id=s.staff_id where c.course like '%course3%'
头像 MT2022
发表于 2025-03-29 22:30:01
select s.staff_id,s.staff_name from staff_tb s left join cultivate_tb c on s.staff_id = c.staff_id where course like "%3%" 简单偷个懒
头像 qx1
发表于 2024-09-20 17:13:21
SELECT s.staff_id ,staff_name FROM staff_tb s LEFT JOIN cultivate_tb c ON s.staff_id=c.staff_id WHERE if(course like '%3%',1,0)=1 ORDER BY 展开全文
头像 又被画饼了的牛可乐很热血
发表于 2025-07-04 16:54:59
select s.staff_id,s.staff_name from staff_tb s join cultivate_tb c using(staff_id) where c.course like '%3%'
头像 壹壹风荷举
发表于 2025-09-13 21:40:14
SELECT s.staff_id, s.staff_name FROM staff_tb AS s JOIN cultivate_tb AS c ON s.staff_id = c.staff_id WHERE c.course LIKE '%course3 展开全文
头像 呼吸丶zero
发表于 2025-07-07 10:33:00
select staff_id ,staff_name from staff_tb join cultivate_tb using(staff_id) where course like '%course3%'
头像 牛客468194973号
发表于 2024-12-17 11:38:22
with t1 as ( select case when course like '%course3%' then 1 else 0 end as course_3, s.staff_id, s 展开全文
头像 Aki5
发表于 2025-08-14 10:17:34
select staff_tb.staff_id, staff_name from staff_tb join cultivate_tb on staff_tb.staff_id = cultivate_tb.staff_id where right(course,1) = '3'
头像 黑桃老七
发表于 2025-05-19 10:16:02
select t1.staff_id, t1.staff_name from staff_tb t1 join cultivate_tb t2 on t1.staff_id = t2.staff_id where t2.course like '%course 展开全文
头像 牛客732134802号
发表于 2025-03-24 19:22:11
select a.staff_id,a.staff_name from staff_tb ajoin cultivate_tb b on a.staff_id=b.staff_idwhere find_in_set('course3',b.course)>0order by a.staff_i 展开全文