大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。
文章目录
- 前言
- 一、题目:181. 超过经理收入的员工
- 二、解题
- 1.正确示范①
- 提交SQL
- 运行结果
- 2.正确示范②
- 提交SQL
- 运行结果
- 3.正确示范③
- 提交SQL
- 运行结果
- 4.正确示范④
- 提交SQL
- 运行结果
- 5.其他
- 总结
前言
一、题目:181. 超过经理收入的员工
表:Employee
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| id | int |
| name | varchar |
| salary | int |
| managerId | int |
+-------------+---------+
Id是该表的主键。
该表的每一行都表示雇员的ID、姓名、工资和经理的ID。
编写一个SQL查询来查找收入比经理高的员工。
以 任意顺序 返回结果表。
查询结果格式如下所示。
输入:
Employee 表:
+----+-------+--------+-----------+
| id | name | salary | managerId |
+----+-------+--------+-----------+
| 1 | Joe | 70000 | 3 |
| 2 | Henry | 80000 | 4 |
| 3 | Sam | 60000 | Null |
| 4 | Max | 90000 | Null |
+----+-------+--------+-----------+
输出:
+----------+
| Employee |
+----------+
| Joe |
+----------+
解释: Joe 是唯一挣得比经理多的雇员。
二、解题
1.正确示范①
提交SQL
select u1.name Employee from Employee u1,Employee u2
where u1.managerId=u2.id
and u1.salary>u2.salary;
运行结果
2.正确示范②
提交SQL
select u1.name Employee from Employee u1
where salary>(
select salary from Employee u2 where u1.managerId=u2.id
);
运行结果
3.正确示范③
提交SQL
select u1.name Employee
from Employee u1
left join Employee u2
on u1.managerId=u2.id
where u1.salary>u2.salary;
运行结果
4.正确示范④
提交SQL
select u1.name Employee
from Employee u1
join Employee u2
on u1.managerId=u2.id
where u1.salary>u2.salary;
运行结果
5.其他
总结
正确示范①思路:
方法1会产生笛卡尔积,通过where限定符合规则的条件即可
where
+and
where u1.managerId=u2.id and u1.salary>u2.salary
正确示范②思路:
采用子查询方式
where
+子查询
where salary>(select salary from Employee u2 where u1.managerId=u2.id)
正确示范③思路:
left join
+on
+where
注意这里的where在该题目中不能换作and
正确示范④思路:
join
+on
+where
或者join
+on
+and