史上最も古典的なデータベース面接問題の2つ


既知のリレーションシップモード:
       
S(SNO,SNAME)学生関係.SNOは学号、SNAMEはC(CNO、CNAME、CTEACHER)という名前のカリキュラム関係です.CNOはカリキュラム番号、CNAMEはカリキュラム名、CTEACHERは担任教師SC(SNO、CNO、SCGRADE)の選択関係である.SCGRADEは成績
1.「李明」先生の講義課程を選択したことがないすべての学生の名前を見つける.
        SELECT SNAME FROM S 
        WHERE NOT EXISTS( 
            SELECT * FROM SC, C 
            WHERE SC.CNO=C.CNO 
            AND CTEACHER='  ' 
            AND SC.SNO=S.SNO)

2.2科目以上(2科目を含む)の不合格課程を持つ学生の名前と平均成績をリストする.
        SELECT S.SNO, S.SNAME, AVG_SCGRADE=AVG(SC.SCGRADE) FROM S, SC, 
        ( 
        SELECT SNO FROM SC 
        WHERE SCGRADE<60 
        GROUP BY SNO 
        HAVING COUNT(DISTINCT CNO)>=2 
        )T 
        WHERE S.SNO=T.SNO 
        AND SC.SNO=T.SNO 
        GROUP BY S.SNO, S.SNAME

3.「1」と「2」の両方を学んだすべての学生の名前をリストします.
        SELECT S.SNO, S.SNAME FROM S, 
        (
        SELECT SC.SNO FROM SC, C 
        WHERE SC.CNO=C.CNO 
        AND C.CNAME IN('1', '2') 
        GROUP BY SNO 
        HAVING COUNT(DISTINCT CNO)=2 
        )T 
        WHERE S.SNO=T.SNO

4.「1」の成績が「2」の成績より高いすべての学生の学号をリストします.
        SELECT S.SNO, S.SNAME FROM S, 
        ( 
        SELECT SC1.SNO FROM SC SC1, C C1, SC SC2, C C2 
        WHERE SC1.CNO=C1.CNO 
        AND C1.NAME='1' 
        AND SC2.CNO=C2.CNO 
        AND C2.NAME='2' 
        AND SC1.SCGRADE>SC2.SCGRADE 
        )T 
        WHERE S.SNO=T.SNO

5.「1」号の成績が「2」号の成績より高いすべての学生の学号とその「1」号の成績と「2」号の成績をリストする.
        SELECT S.SNO, S.SNAME, SC.[1    ], SC.[2    ] FROM S, 
        ( 
        SELECT SC1.SNO, [1    ]=SC1.SCGRADE, [2    ]=SC2.SCGRADE 
        FROM SC SC1, C C1, SC SC2, C C2 
        WHERE SC1.CNO=C1.CNO 
        AND C1.NAME=‘1’ 
        AND SC2.CNO=C2.CNO 
        AND C2.NAME=‘2’ 
        AND SC1.SCGRADE>SC2.SCGRADE 
        )T 
        WHERE S.SNO=T.SNO