SQL今日一题(21):3个子查询

本文是SQL挑战的第21题,旨在找出薪资超过其经理的员工信息。通过联接dept_emp、dept_manager和salaries表,利用3个子查询筛选满足条件的数据。最终展示员工编号、经理编号、员工当前薪水和经理当前薪水。文章还强调了子查询在SQL中的灵活运用,并推荐了相关数据分析话题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是SQL今日一题的第21篇文章

题目描述

获取员工其当前的薪水比其manager当前薪水还高的相关信息,当前表示to_date='9999-01-01',
结果第一列给出员工的emp_no,
第二列给出其manager的manager_no,
第三列给出该员工当前的薪水emp_salary,
第四列给该员工对应的manager当前的薪水manager_salary

用到dept_emp表、dept_manager表和salaries表

dept_emp表

dept_manager表

salaries表

方法

select s_e.emp_no,
       s_m.emp_no as manager_no,
       s_e.salary as emp_salary,
       s_m.salary as manager_salary
from 
(
    select de.emp_no,
           de.dept_no,
           s.salary 
    from dept_emp de 
    inner join salaries s on de.emp_no = s.emp_no 
    where de.emp_no not in 
        (
            select emp_no from dept_manager
        ) 
    and s.to_date = '9999-01-01'
) as s_e,
(
    select dm.emp_no,
           dm.dept_no,
           s.salary 
    from dept_manager dm 
    inner join salaries s on dm.emp_no = s.emp_no 
    where dm.to_date = '9999-01-01' 
    and s.to_date = '9999-01-01'
) as s_m 
where s_e.dept_no = s_m.dept_no
and s_e.salary > s_m.salary

这段SQL看着长,其实是我为了方便理顺逻辑调整了下格式而已,别被吓到。
1、首先我们要想知道员工薪水比manager薪水高的情况,就需要连接2个表,一个表是员工-薪水表,一个表是manager-薪水表,联立连个表以后,再将这两个表用联立,然后取员工-薪水表中的薪水大于manager-薪水表中薪水的值即可。

2、理顺思路我们就来联立表。首先用inner join连接dept_emp和salaries表,以emp_no为公共字段,注意这样连接以后是所有员工的信息,那我们要的是非manager员工的信息,所以里面再嵌套一个子查询,把manager员工的emp_no筛选出来,让连接的表的emp_no不等于manager的emp_no,得到的就是非manager员工的信息,别忘了给出where子句限制“当前”这个条件。查询出来的这个表命名为s_e

3、再来用inner join连接dept_manager和salaries表,以emp_no为公共字段,where子句限制“当前”这个条件,结果命名为s_m。这个连接很简单。

4、再将s_e和s_m连接起来,用where连接即可,公共字段为dept_no。同时给出另一个限制条件:s_e.salary > s_m.salary。

结果

知识点

子查询

  • 这题里嵌套了3个子查询

  • 注意子查询的用法,可以作为过滤条件放在where后,可以作为临时表放在from后,也可以作为一个字段值放在select语句中


猜你喜欢:
什么是好的数据指标:精益数据分析

数据会说谎的真实例子有哪些

有哪些值得推荐的数据可视化工具?(文末送书)

@ 作者:可乐
@ 公众号/知乎专栏/头条/简书:可乐的数据分析之路
@加个人微信:data_cola,备注:进群,拉你入 可乐的数据分析群 和各行各业的小伙伴交流探讨数据分析相关内容

微信公众号
个人微信号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的可乐!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值