2016-11-16 44 views
0

我正在爲我的數據庫考試學習,其中涵蓋了許多我需要手寫的SQL語句。下面是我的書中概述的兩種情景的架構圖和解決方案,這些方案對我來說似乎沒有意義。你可以向我解釋這2個SQL查詢嗎?

enter image description here

Q13:檢索所有員工的部門5誰每週工作超過10小時的項目了ProductX的名字。

SELECT FNAME, LNAME 
FROM EMPLOYEE,PROJECT, WORKS_ON 
WHERE DNO = 5 AND PNAME = ‘PRODUCT X’ AND HOURS>10 AND ESSN=SSN; 

不應該WHERE子句包括PNO = NUM​​BER?如何知道WORKS_ON表參考PROJECT表中沒有包括這個?是因爲我們引用了ESSN = SSN?

Q1:檢索具有相同名字且與僱員性別相同的受撫養人的每名僱員的姓名。

SELECT E.FNAME, E.LNAME 
FROM EMPLOYEE AS E 
WHERE E.SSN IN (SELECT D.ESSN FROM DEPENDENT AS D WHERE E.FNAME = D.DEPENDENT_NAME AND D.SEX = E.SEX); 

我明白此查詢一路上揚,直至WHERE子句。我不明白什麼E.SSN IN正在嘗試處理它之前的子查詢。如果有人能解釋這一點,那會很好。

+0

切勿使用逗號連接語法。並參見相關與非相關的子查詢。 – Strawberry

+0

你使用的是MySQL還是MS SQL Server? (不要標記不涉及的產品。) – jarlh

回答

1

對於第一個問題,是的,你猜對了。應該有另一個條款PNO = NUM​​BER

對於第二個問題,認爲它是這樣的:選擇一個員工,其中員工號[SSN] 是在 employeeIDs [ESSN]由子查詢每個給定的員工號[SSN]返回的列表。這應該很好。但是,因爲Essn和Dependent Name都是Dependent表的關鍵字,所以還可以使用簡單的連接語句並完成它。請閱讀此處:http://www.w3schools.com/sql/sql_join.asp

+0

同樣地:http://meta.stackoverflow.com/questions/280478/why-not-w3schools-com – Strawberry

+0

感謝您的啓發@Strawberry –

1

對於Q13:你需要在一個條件WHERE子句告訴Works_on項目,這是

SELECT FNAME, LNAME 
FROM EMPLOYEE,PROJECT, WORKS_ON 
WHERE Pno = Pnumber AND DNO = 5 AND PNAME = ‘PRODUCT X’ AND HOURS>10 AND ESSN=SSN; 

Q1之間的關係:使用相關子查詢

0
SELECT E.FNAME, E.LNAME 
FROM EMPLOYEE E 
INNER JOIN WORKS_ON WO 
ON WO.Essn = E.Ssn 
INNER JOIN PROJECT P 
ON P.Pnumber = WO.Pno 
where E.DNO = 5 
and P.name = 'ProductX' 
and WO.Hours > 10 
相關問題