单表查询方法?员工表中下属≤6人的经理关联员工信息查询
Hey there! Let's break down your questions one by one:
问题解答
1. 如何进行单表查询?
单表查询是SQL里最基础的操作,核心靠SELECT语句搭配不同子句来精准获取数据,基本结构如下:
SELECT [字段1, 字段2, ... | *] FROM 表名 [WHERE 筛选条件] [GROUP BY 分组字段] [HAVING 分组后筛选条件] [ORDER BY 排序字段 [ASC|DESC]]
给你几个实用示例:
- 查询表中所有字段:
SELECT * FROM 表名; - 查询特定字段并添加筛选条件:
SELECT EmployeeName, FirstName FROM Employee WHERE EmployeeID > 100; - 对查询结果按指定字段排序:
SELECT EmployeeName, ManagerName FROM Employee ORDER BY EmployeeName ASC;
2. 针对Employee表的特定查询需求
要实现「查询FirstName、EmployeeName、ManagerName字段,且筛选出下属≤6人的经理对应的员工信息」,可以通过统计经理下属数量再关联原表的方式完成,这里提供两种常用写法:
方法一:子查询+JOIN
先统计每个经理的下属数,再和原表关联筛选:
SELECT e.FirstName, e.EmployeeName, e.ManagerName FROM Employee e JOIN ( -- 统计每个经理的下属数量,筛选出下属≤6人的经理 SELECT ManagerID, COUNT(*) AS SubordinateCount FROM Employee WHERE ManagerID IS NOT NULL -- 排除无上级的员工(如最高管理层) GROUP BY ManagerID HAVING COUNT(*) <= 6 ) m ON e.ManagerID = m.ManagerID;
方法二:窗口函数(更简洁)
如果你的数据库支持窗口函数(如MySQL 8.0+、PostgreSQL、SQL Server等),可以直接用窗口函数计算下属数后筛选:
SELECT FirstName, EmployeeName, ManagerName FROM ( SELECT FirstName, EmployeeName, ManagerName, COUNT(*) OVER (PARTITION BY ManagerID) AS SubordinateCount FROM Employee WHERE ManagerID IS NOT NULL ) temp WHERE SubordinateCount <= 6;
说明:
- 我们排除了
ManagerID IS NULL的记录,因为这类员工没有上级,不属于任何经理的下属; - 两种方法都能满足需求,你可以根据自己使用的数据库版本选择合适的写法。
内容的提问来源于stack exchange,提问作者Hanif
相关产品推荐
相关产品推荐

