首页 文章

如何查找部门中所有员工的薪水大于30000的部门名称

提问于
浏览
0

我正在努力解决这个关系代数问题 . 以下是该问题涉及的关系 . ( Bold 属性是主键 . )

员工(开斋节,ename,工资,部门,地址)部门(deptNo,dname,building,mgrID)fk dept references Department(deptNo)fk mgrID reference Employee(eid)

这是问题:

打印部门名称,其中所有在该部门工作的员工的薪水都大于30000 .

这就是我试过的:

(G是聚合函数符号 . )

NewRelation(dname, empCount) <- dname G count(eid) (Employee ⋈ dept=deptNo Department)
∏ dname (σ salary>30000 (NewRelation))

但我猜我的方法不对 . 什么是对的? (请使用我在编写代数时使用的相同符号 . )

3 回答

  • 0

    Q)打印部门的名称,其中所有在该部门工作的员工的薪水都超过30000 .

    您可以在MySQL中使用Query .

    SELECT D.dname FROM
    Department D WHERE (SELECT COUNT(*) 
                        FROM Employee E 
                        WHERE E.dept = D.deptNo AND
                                E.salary < 30000) <= 0
    
  • 0

    问:打印部门的名称,其中所有在该部门工作的员工的薪水都超过30000 .

    注意:只有离职名称,而不是员工的任何内容 .

    NewRelation(dname) <- ∏ dname
        ( Department ⋈ deptNo=dept
             (∏ dept (Employee) - ∏ dept (σ salary<=30000 (Employee)) ) )
    

    我_ya方言'作为你的O.P.正如@philipxy所说,有很多变种 . 特别是使用 这样的等连接不是我会做的事情 . (并且有一个更合适的运算符:semidifference . )

    Explanation: (从右到左工作)

    (σ salary<=30000 (Employee)) 让员工(及其 dept )的收入不超过30000 .

    ∏ dept 将项目归结为 dept . 这是我们不想要的部门 .

    ∏ dept (Employee) - 其中 - 是负数,将我们不想要的部门从 dept 的全部集合中取出 .

    Department ⋈ deptNo=dept equi-将那些 dept 加入他们的部门 . 在这种用法中, 仅作为对所有员工收入足够的 dept 的限制 .

    ∏ dname 仅根据要求获取部门名称 . 所以我们每个部门会得到一个元组 . (实际上每个不同的部门名称都有一个元组,以防万一有相同名称的部门 . )

    这个问题可能有一个问题:如果一个部门没有员工,我们是否说他们都赚了> 30000?同样我们可以说他们所有人都<= 30000 . 我假设没有任何部门是“空的” - 请参阅我的提示1 .

    对于此查询,不会显示空的部门 . 实际上FK mgrID references Employee(eid) 并不保证没有空 . 也许由 mgrID 识别的员工与 deptNo 处于不同的 dept

    大致相当的SQL是:

    SELECT DISTINCT dname
    FROM Department D
    WHERE NOT EXISTS (SELECT *
                      FROM Employee E
                      WHERE deptNo = dept
                        AND salary <= 30000 )
    

    这与空的部门问题相反:空部门确实出现 . (那种提问者喜欢用折磨你的东西 . )

  • 0

    Temp < - Employee⋈dept= deptNoDepartment

    Temp2(deptNo,dname,Min_Salary)< - deptNo,dname GMIN(Salary)(Temp)

    Πdname(σMin_Salary> 30000)(Temp2)

    如果部门中薪水最低的员工的薪水大于30000,则表示该部门的所有员工薪水均高于30000 .

相关问题