首页 > 数据库技术 > 详细

数据库系统学习三

时间:2015-10-25 20:56:49      阅读:336      评论:0      收藏:0      [点我收藏+]

先定义四个表:

 教师关系: 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#

             ))

        


数据库系统学习三

原文:http://my.oschina.net/u/2367628/blog/521856

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!