数据库系统学习三

先定义四个表:

 教师关系: T   (T#,TNAME,TITLE)

课程关系:C  (C#,CNAME,T#)

学生关系:S    (S#,SNAME,AGE,SEX)

选课关系:SC  (S#,C#,SCORE)




1、检索至少选修课程号为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


2、检索学习全部课程的学生姓名

    思路: 在表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#));      





3、检索所学课程包含学生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#

             ))

        


你可能感兴趣的:(数据库系统学习三)