SQL中案例实例02—查找收入比经理高的员工,两表连接列比较

题目描述:查找收入比经理高的员工。

下图表头的含义解释-雇员的ID、姓名、工资和经理的ID。
在这里插入图片描述

一、解题思路一

一、将是经理和不是经理的信息分开为两张表,然后以雇员的工资数据为主,左连接经理的工资,用case when 对比来返回雇员信息。

1.1 关于NULL的使用问题

【问题一】这样对比的话,出现一对多的数据对比,表连接有问题。
【问题二】在筛选出雇员信息,使用
select
row_number() over(order by salary desc) as rn
,name
,salary
from employee
where id not in (select managerid from employee)
报错,在最后Id not in 中由于managerid有null值时无法有效进行判断,该代码返回值为null
【问题三】null无法直接判断,即name != null 无法成功
【问题四】select managerid from employee where isnull(managerid)
返回的为是空null所对应的行数据

二、解题思路二

二、由于表employee结构中,最后一行的managerid和整表关联弱,要用独立思维去使用该列数据。
在这里插入图片描述
上图为【select *
from Employee as a
join Employee as b
on a.managerId = b.id】两个表关联后的表

2.1完整代码如下

select 
a.name as Employee
from Employee as a 
join Employee as b
on a.managerId = b.id
where a.salary > b.salary

另一实现代码如下,不使用join连接

select
    e1.Name AS Employee 
FROM
    Employee e1,
    Employee e2
where
    e1.ManagerId = e2.Id AND e1.Salary > e2.Salary

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值