【LeetCode-SQL每日一练】—— 181. 超过经理收入的员工
🎈写在前面
🙋♂️大家好呀,我是超梦梦梦梦。小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟数据库打交道的,为了更好的操作数据库,我们的SQL知识储备是必不可少的。想要掌握好SQL,那少不了每天的练习与学习。接下来小梦会带领小伙伴们一起每天刷一道LeetCode-数据库(SQL)相关的题目,然后在文章后例举相关知识点帮助小伙伴们学习与巩固,更好的掌握SQL。
🙋♂️ 小伙伴们如果在学习过程中有不明白的地方,欢迎评论区留言提问,小梦定知无不言,言无不尽。
目录
🍕题目概述
Employee
表题目:
Employee
表包含所有员工,他们的经理也属于员工。每个员工都有一个 Id,此外还有一列对应员工的经理的 Id。给定Employee
表,编写一个 SQL 查询,该查询可以获取收入超过他们经理的员工的姓名。在上面的表格中,Joe 是唯一一个收入超过他的经理的员工。查询出的结果如下所示。👇
🍕解题思路
首先根据题意,Employee表包含所有员工,他们的经理也属于员工。每个员工都有一个 Id,此外还有一列对应员工的经理的 Id。那我们看到字段ManagerId就是对应员工的经理Id,由Employee表得知joe对应的经理Id是3,Henry对应的经理Id是4。经理也属于员工,id3对应的是Sam,Id4对应的是Max,也就是说joe对应的经理是Sam,Henry对应的经理是Max。
因为表既有员工信息又有经理信息,所以我们需要获取两次信息,我们可以把Employee既看成员工表又看成经理表。题目要求我们查找出员工工资大于经理的,那我们可以通过id字段与ManagerId字段做连接,加一个员工Salary大于经理Salary条件即可。具体方法如下。
🍟方法一
表中存在员工与经理两种信息,我们需要获取两次信息,然后使用Where语句做条件筛查,找出员工工资大于经理的数据。
题解1:
🍟方法二
表中存在员工与经理两种信息,我们需要获取两次信息,除了使用where语句外,我们还可以使用内连接,通过on语句做条件筛查来找出员工工资大于经理的数据。
题解2:
🍕代码实现
🍟方法一
与预测结果一致,成功!
🍟方法二
与预测结果一致,成功!
🍕知识点小结
内连接与外连接
小梦用极简单的方式带小伙伴们过一遍内连接与外连接。
表1 classa
表2 classb
1. 内连接 inner join (join 默认就是内连接)
表1与表2的交集,用上面两个表演示一下
查询的结果是classa与classb的交集
2. 左外连接 left join
结果集保留左表的所有行,但右表只包含与左表匹配的行。右表相应的空行为NULL值。
3. 右外连接 right join
结果集保留右表的所有行,但左表只包含与右表匹配的行。左表相应的空行为NULL值。
4. 全外连接 full join
会把两个表所有的行都显示在结果表中。
小伙伴们注意啦!!!
MySQL不支持full join!!!MySQL不支持full join!!!MySQL不支持full join!!!
重要的事情要说三遍!!!那怎么实现和full join一样的效果呢?那就要通过使用union来实现,具体实现SQL语句如下
😀感谢小伙伴们支持,如果有什么疑问,欢迎留言询问,小梦定知无不言,言无不尽!
- 点赞
- 收藏
- 关注作者
评论(0)