gpt4 book ai didi

sql - 了解 SQL 中的 NOT EXISTS

转载 作者:行者123 更新时间:2023-12-04 18:33:22 24 4
gpt4 key购买 nike

enter image description here

我是 SQL 初学者。我现在正在研究 EXISTS 和 NOT EXISTS。

问题:

Retrieve the names of each employee who works on ALL projects controlled by department 5.

回答:

select fname, lname
from employee
where not exists ( (select pnumber from project where dnum = 5)
MINUS
(select pno from works_on where essn = ssn)
);

子查询中的第一个选择给出 (1,2,3),第二个选择给出 (1,2,3,10,20,30)。所以 (1,2,3) - (1,2,3,10,20,30) = 0。这如何解决查询?我不确定我的逻辑是否正确或我处理问题的方式是否正确。

如果可能的话,有人可以帮助我逐步并直观地理解解决方案吗?谢谢

Link to the course

最佳答案

所以,原来的问题是:

Retrieve the names of each employee who works on ALL the projects controlled by department 5.

提供的答案使用了以下等价物:

  1. 所有 x 使得 f(x)
  2. 没有 x 使得 f(x) 不存在

用英语来说,这个问题等同于找到那些没有由部门 5 控制的项目的员工,该员工不从事该员工的工作。

因此,首先找到部门 5 控制的所有项目,然后从中删除该员工从事的所有项目。这正是提供的答案所做的。如果什么都没有了,那么就没有由部门 5 控制的员工不参与的项目。因此,根据等效性,该员工从事该部门控制的所有项目。

虽然这在技术上是正确的,但感觉有点奇怪。特别是在部门 5 控制零个项目的情况下。如果那是真的,查询将返回所有员工……这可能与预期的不太一样。

关于sql - 了解 SQL 中的 NOT EXISTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43703759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com