數據庫系統學習三

先定義四個表:學習

 教師關係: T   (T#,TNAME,TITLE)spa

課程關係:C  (C#,CNAME,T#)orm

學生關係:S    (S#,SNAME,AGE,SEX)it

選課關係:SC  (S#,C#,SCORE)select




一、檢索至少選修課程號爲C2和C4的學生學號

    select X.S# 

    from SC AS X,SC AS Y

   WHERE X.S#=Y.S# AND X.C# ='C2' AND Y.C#='C4';

 AS 能夠省略 能夠寫成 SC  X,SC  Y


二、檢索學習所有課程的學生姓名

    思路: 在表S中找學生,要求這個學生學了所有的課程。換而言之,在表S 中找學生,在C中不存在一門課,這學生沒有學。

         SELECT SNAME

        FROM S

        WHERE NOT EXISTE                                                                  /* C表中不存在一門課*/

            ( SELECT * 

              FROM C

              WHERE NOT EXISTS                                                            /*該學生沒有學*/

                                (SELECT *

                                   FROM SC

                                  WHERE SC.S#=S.S# AND SC.C#=C.C#));      





三、檢索所學課程包含學生S3所學課程的學生學號。

       思路:在SC表中找一個學生(S#),                       /* 在SC表中找*/

     對與S3學的每一門課(C#),                        /* 在SC表中找*/

                 該學生都學了。                                             /* 在SC表中存在一個元組*/


而後,改爲雙重否認形式:

                 在SC表中找一個學生(S#),                   

     不存在S3學的一門課(C#),                       

                 該學生沒有學了。


SELECT DISTINCT S#

      FROM SC AS X 

       WHERE NOT EXISTS                                               /*不存在是S3學的一門課*/

              (SELECT * 

               FROM SC AS Y

               WHERE Y.S#='S3' AND NOT EXISTS            /*該學生沒有學*/

                   (SELECT *

                     FROM SC AS Z

                      WHERE Z.S#=X.S# AND Z.C#=Y.C#

             ))

相關文章
相關標籤/搜索