You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询所有员工薪资均大于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 07:32:44