这是数据库:
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)
提出的问题是......
提供两名工作的未婚员工的姓氏和SSN 或更多项目。
SELECT e.Lname, e.ssn
FROM Employee AS e
WHERE e.ssn IN (
SELECT w.essn
FROM works_on w
GROUP BY w.essn
HAVING count(*) >= 2
)
AND e.ssn NOT IN (
SELECT essn
FROM dependent
WHERE relationship = 'Spouse'
);
我的回答是错的,因为我没有使用e.ssn NOT IN
条款。
我的问题是:
1)group by
用于什么?严格仅限于作品?
2)关于FROM Employee AS e
,AS
是拼写错误还是命令?
3)having
是否包括?可以用其他命令代替吗?
答案 0 :(得分:0)
1)是的。分组出现在子选择
中(
select w.essn
from works_on w
group by w.essn
having count(*) >= 2
)
并且只在那里有效。
2)" as"创建一个别名,在这种情况下" e"为"员工"。这可以避免在任何地方写作员工的繁琐乏味。有些SQL数据库不需要" as"但它通常是一个好主意,因为它使你的意图清晰。
3)"有"就像一个" Where"对group by子句的每个成员进行操作。 https://en.wikipedia.org/wiki/Having_%28SQL%29