我是一名立志把细节说清楚的博主,欢迎【关注】🎉 ~
原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~
如有错误、疑惑,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持
原题
表:Employee
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| empId | int |
| name | varchar |
| supervisor | int |
| salary | int |
+-------------+---------+
empId 是该表中具有唯一值的列。
该表的每一行都表示员工的姓名和 id,以及他们的工资和经理的 id。
表:Bonus
+-------------+------+
| Column Name | Type |
+-------------+------+
| empId | int |
| bonus | int |
+-------------+------+
empId
是该表具有唯一值的列。
empId
是 Employee
表中 empId
的外键(reference 列)。
该表的每一行都包含一个员工的 id
和他们各自的奖金。
编写解决方案,报告每个奖金 少于 1000
的员工的姓名和奖金数额。
以 任意顺序 返回结果表。
结果格式如下所示。
示例 1:
输入:
Employee
:
+-------+--------+------------+--------+
| empId | name | supervisor | salary |
+-------+--------+------------+--------+
| 3 | Brad | null | 4000 |
| 1 | John | 3 | 1000 |
| 2 | Dan | 3 | 2000 |
| 4 | Thomas | 3 | 4000 |
+-------+--------+------------+--------+
Bonus
table:
+-------+-------+
| empId | bonus |
+-------+-------+
| 2 | 500 |
| 4 | 2000 |
+-------+-------+
输出:
+------+-------+
| name | bonus |
+------+-------+
| Brad | null |
| John | null |
| Dan | 500 |
+------+-------+
题解
SELECT name, bonus
FROM employee e LEFT JOIN bonus b
ON e.empId = b.empId
WHERE bonus < 1000 OR bonus IS NULL;
解题笔记
这题使用连接查询就能很快捷的解出,唯一需要注意的地方是
- 对 “奖金少于1000” 的理解,不能忽略没有奖金的员工,即奖金为
NULL
的情况。 LEFT JOIN
关键字,左连接查询,全称左外连接查询。- 以
LEFT JOIN
关键字为基准,左边的表称为左表,右边的表称为右表。 - 以
ON
关键字作为连接条件。 - 将左表所有的数据查询出来,一并填充对应的右表数据,如果没有对应的右表数据,则右表字段以
NULL
作为填充。
- 以
【拓展】:各种 JOIN
连接查询,用法、区别、性能等详细说明请看文章:【MySQL】连接查询 —— 图文详解:内连接、外连接、左连接、左外连接、右连接、右外连接、全连接、全外连接
我是一名立志把细节说清楚的博主,欢迎【关注】🎉 ~
原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~
如有错误、疑惑 ,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持