卡在这个命令循环中,试图得到这个查询命令的正确答案

stuck at this command loop, trying to get right answer for this query commands

EMPLOYEE (fname, minit, lname, ssn, birthdate, address, sex, salary, superssn, dno)     KEY: ssn
DEPARTMENT (dname, dnumber, mgrssn, mgrstartdate)               KEY: dnumber.
PROJECT  (pname, pnumber, plocation, dnum)                          KEY: pnumber.
WORKS_ON (essn, pno, hours)                                         KEY: (essn, pno)
DEPENDENT  (essn, dependent-name, sex, bdate, relationship)             KEY: (essn, dependent-name)

基本上我想得到每个没有家属的女经理的名字、姓氏和社会保障。

这是我到目前为止写的:

select e.fname, e.lname, e.ssn
from employee e, department d

where d.mgrssn = e.ssn
and e.sex = 'f'
and not exist in (

    select *
    ?
)

我基本上卡在了循环中的 select 语句,它里面应该有什么?

也许您可以使用 NOT IN 而不是 EXISTS:

SELECT e.fname, e.lname, e.ssn
FROM employee e, department d
WHERE d.mgrssn = e.ssn
AND e.sex = 'f'
AND e.ssn not in (
    SELECT essn
    FROM dependant
)

希望对您有所帮助!

当您 select 一位女经理的家属时,您希望没有任何行。所以写一个select,returnse.essn的家属,嵌套在NOT EXISTS ()里面。或者,当您 select 所有家属的 ssns 时,您希望没有 e.essn。所以写一个 select 那 returns dependents' essns 并将其嵌套在 e.ssn NOT IN()`.

PS:没有循环! select 语句的 FROM 子句创建一个 table,其中包含来自两个 table 和列名称 table 的行的所有可能组合。 =17=]列。 (您可以省略 table。如果 column 是唯一的。)然后它只保留满足 WHERE 的行。那么你必须去掉 SELECT 子句中重复的 _column_s。