如何查询所有员工薪资均大于50000的部门?(SQL多表查询)
正确SQL写法:查询所有员工薪资均大于50000的部门
原SQL的问题在于WHERE ALL Employe.Salaire > 50000语法错误,ALL关键字不能直接这样使用;另外如果核心目标是筛选符合条件的部门,原语句没必要返回员工姓名和薪资(若需展示部门下的员工信息,需先锁定符合条件的部门再关联)。
以下是几种可行的正确写法:
方法1:使用NOT EXISTS(推荐,性能更优)
通过查找不存在薪资≤50000员工的部门,间接筛选出所有员工薪资都超50000的部门:
SELECT d.Nom_Departement FROM Departement d WHERE NOT EXISTS ( SELECT 1 FROM Employe e WHERE e.Code_Departement = d.Code_Departement AND e.Salaire <= 50000 );
方法2:使用GROUP BY + HAVING
按部门分组后,检查该部门的最低薪资是否大于50000(若部门最低薪资都达标,所有员工薪资必然符合要求):
SELECT d.Nom_Departement FROM Departement d JOIN Employe e ON e.Code_Departement = d.Code_Departement GROUP BY d.Code_Departement, d.Nom_Departement HAVING MIN(e.Salaire) > 50000;
方法3:使用ALL子查询的正确形式
利用ALL子查询判断部门下每一位员工的薪资都大于50000:
SELECT d.Nom_Departement FROM Departement d WHERE 50000 < ALL ( SELECT e.Salaire FROM Employe e WHERE e.Code_Departement = d.Code_Departement );
如果需要同时返回部门下的员工信息,可以基于上述逻辑关联员工表:
SELECT d.Nom_Departement, e.nom, e.Salaire FROM Departement d JOIN Employe e ON e.Code_Departement = d.Code_Departement WHERE d.Code_Departement IN ( SELECT d2.Code_Departement FROM Departement d2 WHERE NOT EXISTS ( SELECT 1 FROM Employe e2 WHERE e2.Code_Departement = d2.Code_Departement AND e2.Salaire <= 50000 ) );
内容的提问来源于stack exchange,提问作者ZeroBlue
相关产品推荐
相关产品推荐

