写点什么

数据库每日一题 --- 第 17 天:丢失信息的雇员

作者:知心宝贝
  • 2022 年 6 月 19 日
  • 本文字数:1008 字

    阅读完需:约 3 分钟

数据库每日一题---第17天:丢失信息的雇员

一、问题描述

: Employees


+-------------+---------+| Column Name | Type    |+-------------+---------+| employee_id | int     || name        | varchar |+-------------+---------+employee_id 是这个表的主键。每一行表示雇员的id 和他的姓名。
复制代码


: Salaries


+-------------+---------+| Column Name | Type    |+-------------+---------+| employee_id | int     || salary      | int     |+-------------+---------+employee_id is 这个表的主键。每一行表示雇员的id 和他的薪水。
复制代码


写出一个查询语句,找到所有 丢失信息 的雇员id。当满足下面一个条件时,就被认为是雇员的信息丢失:


  • 雇员的 姓名 丢失了,或者

  • 雇员的 薪水信息 丢失了返回这些雇员的id employee_id, 从小到大排序 。


查询结果格式如下面的例子所示。


题目链接丢失信息的雇员

二、题目要求

样例

输入:Employees table:+-------------+----------+| employee_id | name     |+-------------+----------+| 2           | Crew     || 4           | Haven    || 5           | Kristian |+-------------+----------+Salaries table:+-------------+--------+| employee_id | salary |+-------------+--------+| 5           | 76071  || 1           | 22517  || 4           | 63539  |+-------------+--------+输出:+-------------+| employee_id |+-------------+| 1           || 2           |+-------------+解释:雇员1,2,4,5 都工作在这个公司。1号雇员的姓名丢失了。2号雇员的薪水信息丢失了。
复制代码

考察

1.union连接、子查询2.建议用时10~25min
复制代码

三、问题分析

这一题主要考察数据的筛选问题,题目要求我们求出没有姓名或者没有工资的员工编号,最后对结果按照编号升序排列。


可以拆分成两部分:


  • 员工表中,筛选出没有工资的编号,遍历每一名员工的编号,判断是否在工资表中出现就行,未出现就是我们要查询的结果

  • 工资表中,筛选出没有姓名的编号,遍历每一名员工的编号,判断是否在员工表出现就行,未出现就是我们要查询的结果


最后将两个表的结果组合起来,利用order by排序输出。

四、编码实现

select employee_idfrom Employeeswhere employee_id not in(select employee_id from Salaries )unionselect employee_id from Salaries where employee_id not in(select employee_id from Employees )order by  employee_id
复制代码

五、测试结果




发布于: 刚刚阅读数: 3
用户头像

知心宝贝

关注

公众号:穿越计算机的迷雾 2022.03.07 加入

生于尘埃 溺于人海 死于理想高台

评论

发布
暂无评论
数据库每日一题---第17天:丢失信息的雇员_数据库_知心宝贝_InfoQ写作社区