2016-11-16 9 views
0

私は手作業で書く必要がある多くのSQL文をカバーする私のDB試験を勉強しています。以下は、私の本に記載されている2つのシナリオのスキーマ図とソリューションで、私には分かりません。これらの2つのSQLクエリを私に説明できますか?

enter image description here

Q13:ProductXプロジェクトで、週10時間以上働く部門5の全従業員の名前を取得します。

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がそれより前のサブクエリで何をしようとしているのか分かりません。誰かがこれを説明することができれば、それは素晴らしいことでしょう。 Q13については

+0

コンマ区切りの構文を使用しないでください。相関のないサブクエリと非相関のサブクエリを参照してください。 – Strawberry

+0

MySQLまたはMS SQL Serverを使用していますか? (関連していない商品にタグを付けないでください) – jarlh

答えて

1

最初の質問では、はい、あなたはそれを正しく推測しました。 PNO = NUM​​BERという別の句が必要です。

2番目の質問では、従業員番号[Ssn] employeeIDs [Essn]のリスト内にある従業員を、特定の従業員番号[Ssn]ごとにサブクエリによって返されたものを選択します。これは正常に動作するはずです。しかし、EssnとDependent NameはどちらもDependentテーブルのキーなので、単純なjoinステートメントを使用してそれを実行することもできます。ここで読む:http://www.w3schools.com/sql/sql_join.asp

+0

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

+0

私に啓蒙してくれてありがとう@Strawberry –

1

相関サブクエリを使用しています:あなたは

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であるWorks_onプロジェクト、との関係を伝え句はに1つの以上の条件を含める必要が。

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 
関連する問題