【SQL】有至少五名直接下属的经理

目录

语法

需求

示例

分析

代码


语法

SELECT columns

FROM table1 JOIN table2

ON table1.common_column = table2.common_column;

在数据库管理和编程中,JOIN 是一种用于结合来自两个或多个表的数据的 SQL 操作。通过使用 JOIN,你可以根据两个表中的某些列之间的匹配关系,获取这些表的组合结果集。JOIN 操作在关系型数据库管理系统(RDBMS)中非常常见

左链接

SELECT columns

FROM table1 LEFT JOIN table2

ON table1.common_column = table2.common_column;

  • 返回左表中的所有行,以及右表中满足连接条件的匹配行。
  • 如果右表中没有匹配的行,则结果集中的右表部分将包含 NULL 值。

右链接

SELECT columns  
FROM table1  
RIGHT JOIN table2  
ON table1.common_column = table2.common_column;

  • 返回右表中的所有行,以及左表中满足连接条件的匹配行。
  • 如果左表中没有匹配的行,则结果集中的左表部分将包含 NULL 值。

全链接

SELECT columns

FROM table1 FULL JOIN table2

ON table1.common_column = table2.common_column;

  • 返回两个表中的所有行,当其中一张表中没有匹配时,结果集中的对应部分将包含 NULL 值。

交叉链接

SELECT columns

FROM table1 CROSS JOIN table2;

  • 返回两个表的笛卡尔积,即返回两个表中所有行的组合。
  • 如果没有 WHERE 子句来限制结果集,则结果集的大小将是两个表大小的乘积。

自链接

SELECT e1.columns, e2.columns

FROM employees e1 INNER JOIN employees e2

ON e1.manager_id = e2.employee_id;

  • 是一种特殊的连接,其中一个表与自己进行连接。
  • 常用于查找表中的相关记录,例如查找员工及其经理的信息。

需求

表: Employee

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| name        | varchar |
| department  | varchar |
| managerId   | int     |
+-------------+---------+
id 是此表的主键(具有唯一值的列)。
该表的每一行表示雇员的名字、他们的部门和他们的经理的id。
如果managerId为空,则该员工没有经理。
没有员工会成为自己的管理者。

编写一个解决方案,找出至少有五个直接下属的经理。

以 任意顺序 返回结果表。

查询结果格式如下所示。

示例

输入: 
Employee 表:
+-----+-------+------------+-----------+
| id  | name  | department | managerId |
+-----+-------+------------+-----------+
| 101 | John  | A          | Null      |
| 102 | Dan   | A          | 101       |
| 103 | James | A          | 101       |
| 104 | Amy   | A          | 101       |
| 105 | Anne  | A          | 101       |
| 106 | Ron   | B          | 101       |
+-----+-------+------------+-----------+
输出: 
+------+
| name |
+------+
| John |
+------+

分析

该表的每一行表示雇员的名字、他们的部门和他们的经理的id。没有员工会成为自己的管理者。

经理和下属均具有独立id,经理的managerId为null,下属的managerId为对应经理id

交叉连接 from Employee e1 join Employee e2

匹配 on e1.id = e2.managerId

找出至少有五个直接下属的经理

需要计数,按照经理的id分组 group by e1.id

仅需至少五个下属 having count(e2.managerId) >= 5

输出经理name

select e1.name name

代码

select e1.name name
from Employee e1 join Employee e2 
on e1.id = e2.managerId
group by e1.id
having count(e2.managerId) >= 5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

F_D_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值