欢迎来到 SQL 语句使用指南的专栏!📊 无论你是刚接触数据库的新手,还是希望精进技能的开发者,这里都能为你提供实用的 SQL 知识与技巧。
SQL 作为数据查询与管理的核心语言,早已成为后端开发、数据分析、运维等岗位的必备技能。从简单的单表查询到复杂的多表关联,从数据筛选到聚合分析,掌握 SQL 不仅能提升工作效率,更能帮你从海量数据中挖掘有价值的信息🔍。
在这个专栏里,我们会从基础语法讲起,逐步深入到高级用法。你将学到如何通过 JOIN 语句实现多表关联查询,如何用子查询解决复杂逻辑,如何优化 SQL 性能以应对大数据量场景…… 每一篇文章都会搭配具体案例,让抽象的语法变得通俗易懂💡。
无论你是想解决工作中遇到的 SQL 难题,还是为面试做准备,都不妨跟着我们的节奏一步步探索。如果在学习过程中有任何疑问,欢迎在评论区留言交流,让我们一起在实践中成长,真正做到学以致用,让 SQL 成为你职业生涯中的得力工具🚀!
目录
一.题目描述
表:
Employee
+---------------+---------+ | Column Name | Type | +---------------+---------+ | employee_id | int | | department_id | int | | primary_flag | varchar | +---------------+---------+ 这张表的主键为 employee_id, department_id (具有唯一值的列的组合) employee_id 是员工的ID department_id 是部门的ID,表示员工与该部门有关系 primary_flag 是一个枚举类型,值分别为('Y', 'N'). 如果值为'Y',表示该部门是员工的直属部门。 如果值是'N',则否一个员工可以属于多个部门。当一个员工加入超过一个部门的时候,他需要决定哪个部门是他的直属部门。请注意,当员工只加入一个部门的时候,那这个部门将默认为他的直属部门,虽然表记录的值为
'N'
.请编写解决方案,查出员工所属的直属部门。
返回结果 没有顺序要求 。
返回结果格式如下例子所示:
示例 1:
输入: Employee table: +-------------+---------------+--------------+ | employee_id | department_id | primary_flag | +-------------+---------------+--------------+ | 1 | 1 | N | | 2 | 1 | Y | | 2 | 2 | N | | 3 | 3 | N | | 4 | 2 | N | | 4 | 3 | Y | | 4 | 4 | N | +-------------+---------------+--------------+ 输出: +-------------+---------------+ | employee_id | department_id | +-------------+---------------+ | 1 | 1 | | 2 | 1 | | 3 | 3 | | 4 | 3 | +-------------+---------------+ 解释: - 员工 1 的直属部门是 1 - 员工 2 的直属部门是 1 - 员工 3 的直属部门是 3 - 员工 4 的直属部门是 3
二.解题思路
①先找出加了多个部门的员工的直属部门
②再找出只加了一个部门的员工(该部门默认为该员工的直属部门)
③通过union操作符,将上面两个结果集,合在一块,构成最终的结果
三.代码
-- 找出加多个部门的员工的直属部门
select employee_id, department_id
from Employee
where primary_flag = 'Y'
union
-- 找只加了一个部门的员工(该部门默认为直属部门)
select employee_id, department_id
from Employee
group by employee_id
having count(employee_id) = 1
四.重点掌握
1.union操作符
- 合并结果集:
UNION
将多个查询的结果合并为一个结果集- 去重:默认情况下,
UNION
会自动去除重复的行- 列数相同:所有联合的查询必须具有相同数量的列
- 数据类型兼容:对应列的数据类型必须兼容
以上就是【员工的直属部门】问题的全部解题过程,希望可以帮到你,喜欢的话可以留个免费的关注哟~~~