【刷题记录】6.超过经理收入的员工

124 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

题目来源:LeetCode>超过经理收入的员工

表:Employee

Column NameType
idint
namevarchar
salaryint
managerIdint

Id是该表的主键。 该表的每一行都表示雇员的ID、姓名、工资和经理的ID。

编写一个SQL查询来查找收入比经理高的员工。

以 任意顺序 返回结果表。

查询结果格式如下所示。

示例 1:

输入: Employee 表:

idnamesalarymanagerId
1Joe700003
2Henry800004
3Sam60000Null
4Max90000Null

输出:

Employee
Joe

解释: Joe 是唯一挣得比经理多的雇员。

二、思路分析&AC 代码:

方法 1:

使用两张表进行关联查询,一张表用作基础数据,另一张表用于匹配条件,筛选满足条件的数据。

两张表直接关联查询,会产生笛卡尔积,在此之上,需要增加条件用于筛选。

SELECT
	a.NAME AS 'Employee' 
FROM
	Employee AS a,
	Employee AS b 
WHERE
	a.ManagerId = b.Id 
	AND a.Salary > b.Salary;

方法 2:

使用 JOIN 语句关联查询,相比于直接关联,JION也是一个更常用也更有效的将表连起来的办法,并且需要使用ON指明关联条件。使用JOIN关联

SELECT
	a.NAME AS Employee 
FROM
	Employee AS a
	JOIN Employee AS b ON a.ManagerId = b.Id 
	AND a.Salary > b.Salary;

四、总结:

  1. JOIN多用于把两个或多个表进行关联结合。
  2. JOIN主要有以下几个用法:

INNER JOIN:内连接,获取两个表中字段匹配关系的记录;

LEFT JOIN:左连接,获取左表中的所有记录,即使在右表没有对应匹配的记录;

RIGHT JOIN:右连接,与 LEFT JOIN相反,用于获取右表中的所有记录,即使左表没有对应匹配的记录。