围绕SQL查询的中期解决方案

时间:2015-11-13 23:57:04

标签: sql database group-by having

这是数据库:

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 eAS是拼写错误还是命令?

3)having是否包括?可以用其他命令代替吗?

1 个答案:

答案 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