gpt4 book ai didi

sql - SQL 中的 NOT EXISTS 子句

转载 作者:行者123 更新时间:2023-12-03 23:24:18 26 4
gpt4 key购买 nike

我一直被困在一个查询上,我真的无法思考执行是如何发生的,任何帮助将不胜感激:

该查询旨在查找参与所有项目的员工的详细信息。

查询是:

SELECT E.LNAME, E.FNAME
FROM EMPLOYEE E
WHERE NOT EXISTS
(
SELECT PNUMBER
FROM PROJECT
WHERE PNUMBER NOT EXISTS
(
SELECT PNO
FROM WORKS_ON
WHERE ESSN=E.SSN
)
);

数据库结构是:

带有列的表项目:

Pname,Pnumber,Plocation and dnum



带有列的表works_on:

ESSN,PNO and HOURS



带有列的表员工:

Fname,minit,Lname,SSN,Bdate,address, sex,salary,superssn and dno



如果有人能用简单的语言解释这个查询是如何执行的,那将非常有帮助。

最佳答案

如果子查询至少返回一行,则认为 SQL EXISTS 条件“满足”。

因此,通过暗示 NOT EXISTS,我们希望子查询返回零行,因此有了这些知识,让我们看看您的查询

SELECT E.LNAME, E.FNAME
FROM EMPLOYEE E
WHERE NOT EXISTS (SELECT PNUMBER
FROM PROJECT
WHERE PNUMBER NOT EXISTS (SELECT PNO
FROM WORKS_ON
WHERE ESSN=E.SSN ) );

有两个嵌套的 NOT EXISTS 语句,SQL 必须以相反的顺序运行它们,因为一个依赖于另一个。第一个将被查询的是这个(最后一个):
SELECT PNO 
FROM WORKS_ON
WHERE ESSN=E.SSN

如果这返回零行(因为我们已经说过 NOT EXISTS),那么它将运行下一个查询,这将是:
SELECT PNUMBER
FROM PROJECT

同样,这必须返回零行,如果确实如此,则它将运行最终查询,即第一个查询。
SELECT E.LNAME, E.FNAME
FROM EMPLOYEE E

本质上,每个“NOT EXIST”子查询都必须返回零行才能运行前面的查询,否则最终会得到 0 行(没有结果)。

有关 EXISTS 条件的更多信息 here

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

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