使用外连接编写查询,被需要或排除的条件混淆

writing an query using outer join, confused by conditions needed or excluded

EMPLOYEE (fmane, 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)

我想查找从事超过 3 个项目的所有员工的姓氏和 ssn,但我只想对此查询使用外部联接。

Select e.lname, e.ssn
from employee e
join e.ssn in (
select w.essn
from works_on w, project p
outer join w.pno = p.pnumber
group by w.essn
having count (*) >= 3
)

1) 我的外部连接似乎还不错,还是在第二次连接后我确实需要另一个连接?

2) 让我困惑的一件事是如果只想要 lname 而不是 essn,我是否将嵌套查询中的 e.ssn 和 select w.essn 更改为 ssn和 essn?

--get the last name and ssn
Select e.lname, e.ssn
--of every employee
from employee e
--where the employee worked on 
inner join works_on w
on w.essn = e.ssn
group by e.lname, e.ssn
--at least 3 different projects
having count(distinct w.pno) >= 3

SQL 中的 FULL JOIN 和 FULL OUTER JOIN 可以互换。此外,您还必须了解 WHERE 子句中的内容以及连接的位置。我是这样想的。你在这个条件下加入这些 tables,这就是你写它的方式。 NOT ON this condition JOIN these tables 你是这样写的。

如果您要从另一个查询中的单个列列表中的单个列列表中查找某些内容,您希望在 Where 原因中使用子查询。 from 子句中的子查询更适用于生成 table 的查询 我在 FROM 子句中经常使用子查询,例如当我从单个 table 上的列进行多次计算时。 例如,假设我有一个 table,其中男女人数按国家和地区分开,我想获得总人口我会在 from 子句中使用这样的查询

SELECT Country, SUM(MEN + WOMEN) [Total Population]
FROM(
  SELECT Country, SUM(Men) Men, Sum(Women) Women
  FROM dbo.countries
  WHERE country = 'US'
  GROUP BY Country) tbl
GROUP BY Country

这是您的查询,语法正确并稍作调整,希望对您有所帮助。

SELECT lname, ssn
FROM employee
WHERE ssn in (
    select w.essn
    from works_on w
    FULL OUTER JOIN project p
        ON w.pno = p.pnumber
    group by w.essn
    having count (*) >= 3
)