有下面的数据库
学生:s(s# ,sname,sex,age,d#) 主键s#
教师:prof(p#,pname,age,d# ,Sal)主键p#
课程:c(c# ,cname) 主键c#
选课:sc(s#,c#,score)主键s#,c#
教课:pc(p#,c#,score)主键p#,c#
院系:d(d# ,dname) 主键d#现有下面的查询
查询所学的课程包含了学生S3所学的课程的学生的学号
各位帮帮忙

解决方案 »

  1.   

    SELECT S.S# 
    FROM S,SC
    WHERE S.S#=SC.S#
    AND SC.C# IN 
    (sELECT C.C# 
    FROM C,S,SC 
    WHERE S.SNAME='S3'
    AND S.S#=SC.S#
    AND C.C#=SC.C#)
      

  2.   

    SELECT S.S# 
    FROM S,SC
    WHERE S.S#=SC.S#
    AND SC.C# IN 
    (sELECT C.C# 
    FROM C,S,SC 
    WHERE S.S#='S3'
    AND S.S#=SC.S#
    AND C.C#=SC.C#)
      

  3.   

    搜出来的结果不对
    SQL> run
      1  select distinct S.S#
      2  FROM S,SC
      3  WHERE S.S#=SC.S#
      4  AND SC.C# IN
      5  (sELECT C.C#
      6  FROM C,S,SC
      7  WHERE S.s#='S3'
      8  AND S.S#=SC.S#
      9* AND C.C#=SC.C#)S#
    ----
    S1
    S3
    aaa
    sssSQL> select * from sc;S#   C#       GRADE
    ---- ---- ---------
    S1   C1
    S1   C2           9
    S1   C3          33
    S3   C1          33
    S3   C3          22
    aaa  C1          33
    aaa  C2          44
    sss  C1          34
    sss  C3          45查询到9记录.
      

  4.   

    这样的语句是错误的
    in相当于多个条件的or连接
    只要有一个条件为真 那么整个判断就为真了
      

  5.   

    select distinct s2.s# from sc s1,sc s2 where s1.s#='S3' and s1.c#=s2.c#;
      

  6.   

    先查询S3所有课程
    然后作为条件去查询学生学号,用in包含
      

  7.   

    S#  C#      GRADE 
    ---- ---- --------- 
    S1  C1 
    S1  C2          9 
    S1  C3          33 
    S3  C1          33 
    S3  C3          22 
    aaa  C1          33 
    aaa  C2          44 
    sss  C1          34 
    sss  C3          45 
    你想得到什么结果?
    S1和SSS?