Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
题目来源:LeetCode>超过经理收入的员工
表:Employee
| Column Name | Type |
|---|---|
| id | int |
| name | varchar |
| salary | int |
| managerId | int |
Id是该表的主键。 该表的每一行都表示雇员的ID、姓名、工资和经理的ID。
编写一个SQL查询来查找收入比经理高的员工。
以 任意顺序 返回结果表。
查询结果格式如下所示。
示例 1:
输入: Employee 表:
| id | name | salary | managerId |
|---|---|---|---|
| 1 | Joe | 70000 | 3 |
| 2 | Henry | 80000 | 4 |
| 3 | Sam | 60000 | Null |
| 4 | Max | 90000 | Null |
输出:
| 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;
四、总结:
- JOIN多用于把两个或多个表进行关联结合。
- JOIN主要有以下几个用法:
INNER JOIN:内连接,获取两个表中字段匹配关系的记录;
LEFT JOIN:左连接,获取左表中的所有记录,即使在右表没有对应匹配的记录;
RIGHT JOIN:右连接,与 LEFT JOIN相反,用于获取右表中的所有记录,即使左表没有对应匹配的记录。