2015-11-13 113 views
0

這是數據庫:中期解決方案SQL

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

1)是的。該組通過出現在子選擇

(
    select w.essn 
    from works_on w 
    group by w.essn 
    having count(*) >= 2 
) 

並且僅在那裏有效。

2)「as」創建別名,在本例中爲「employee」創建「e」。這可以讓您避免在任何地方編寫員工的繁瑣。一些SQL數據庫不需要「as」,但它通常是一個好主意,因爲它使你的意圖清晰。

3)「擁有」就像一個「Where」,它對一個group by子句的每個成員進行操作。 https://en.wikipedia.org/wiki/Having_%28SQL%29

+0

嘿傑夫如果你有時間你可以回答我有其他問題,我不能問另一個問題,但在Stackoverflow的問題 –

+0

有沒有我可以達到你的電子郵件地址? –

+0

我用它來說,HAVING就像集合函數的WHERE。 – jarlh