检索处理由部门号5控制的所有项目的每个员工的姓名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检索处理由部门号5控制的所有项目的每个员工的姓名相关的知识,希望对你有一定的参考价值。

这个问题来自于基础数据库系统第6版(Elmasri,Navathe)第5章查询3b。作者回答这个问题的一种方法是使用存在量词:

SELECT Lname, Fname
FROM EMPLOYEE
WHERE NOT EXISTS ( SELECT *
                  FROM WORKS_ON B
                  WHERE ( B.Pno IN ( SELECT Pnumber
                                    FROM PROJECT
                                    WHERE Dnum=5 )
                  AND
                  NOT EXISTS ( SELECT *
                               FROM WORKS_ON C
                               WHERE C.Essn=Ssn
                               AND C.Pno=B.Pno )));

作者将解决方案解释为:

选择每个员工,使得不存在由部门5控制的员工不工作的项目

我无法理解第二个内部相关子查询如何与其他不相关的子查询和外部查询相关联以给出正确的结果。 任何帮助表示赞赏。

答案
SELECT fname, lname FROM employee
WHERE NOT EXISTS
(SELECT pnumber FROM project WHERE dnum=5
AND pnumber NOT IN
(SELECT pno FROM works_on WHERE ssn=essn));

请注意,除了在mysql中不起作用

另一答案
SELECT FNAME,LNAME
FROM   EMPLOYEE
WHERE  EXISTS   ( SELECT *
                  FROM DEPENDENT
                  WHERE SSN=ESSN)
AND EXISTS 
                ( SELECT *
                  FROM DEPARTMENT
                  WHERE SSN=MGR_SSN);

以上是关于检索处理由部门号5控制的所有项目的每个员工的姓名的主要内容,如果未能解决你的问题,请参考以下文章

从多个表中获取数据

Mysql 练习题10道(11-20题)

MySQL连接查询

SQL系统函数的使用(实验五)

在部门的所有项目中工作的员工

对数据进行限定和排序