表: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 table: +-------+--------+------------+--------+ | 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 | +------+-------+
答:
每个奖金少于1000的员工的姓名和奖金数额,你可以使用SQL查询,首先从Employee表中获取所有员工的姓名和奖金数额,然后与Bonus表中的奖金进行关联,最后筛选出奖金少于1000的员工。以下是相应的SQL查询:
SELECT E.name, B.bonus
FROM Employee E
LEFT JOIN Bonus B
ON E.empId = B.empId
WHERE B.bonus < 1000 OR B.bonus IS NULL;
查询首先从Employee表(重命名为E)中选择员工的姓名和奖金数额,并通过LEFT JOIN与Bonus表(重命名为B)进行关联,关联条件是Employee表中的empId等于Bonus表中的empId。然后,使用WHERE子句筛选出奖金少于1000或者奖金为NULL的员工。
查询的结果将包含每个符合条件的员工的姓名和奖金数额,以及奖金为NULL的员工