S(S#,SNAME,AGE,SEX),学号,姓名,年龄,性别
C(C#,CNAME,TEACHER),课程号,课程名
SC(S#,C#,GRADE),学号,课程号,年级检索所有学生都选修的课程的课程号与课程名

解决方案 »

  1.   

    --方法1:
    SELECT *
      FROM S
     WHERE SNUM IN
           (SELECT SNUM
              FROM (SELECT SC.SNUM, COUNT(SC.SNUM) CC FROM SC GROUP BY SC.SNUM)
             WHERE CC = (SELECT COUNT(1) FROM C));
    --方法2 :
    SELECT *
      FROM S
     WHERE NOT EXISTS (SELECT *
              FROM C
             WHERE NOT EXISTS (SELECT *
                      FROM SC
                     WHERE SNUM = S.SNUM
                       AND CNUM = C.CNUM));
      

  2.   

    楼上不对
    假如表数据如下:
    S表:
    S#
    -----
    01
    02
    03SC表:
    S#    C# 
    ----------
    01    A
    01    B
    02    B
    03    B
    03    CC表:
    C#   CNAME
    -----------
    A    语文
    B    数学
    C    英语那么想要的结果应该是:
    C#   CNAME
    -----------
    B    数学
      

  3.   

    select  c.c#,c.cname from c where c.c# in (select c# from (select c# ,count(*) rs from sc group by S# where rs =(select count(*) from s ))
      

  4.   

    楼上的S改改为C
    SELECT CNUM, CNAME
      FROM C
     WHERE CNUM IN
           (SELECT CNUM
              FROM (SELECT SC.CNUM, COUNT(SC.SNUM) CC FROM SC GROUP BY SC.CNUM)
             WHERE CC = (SELECT COUNT(1) FROM C));
      

  5.   

    select  c.c#,c.cname from c where c.c# in (select c# from (select c# ,count(*) rs from sc group by S# )where rs =(select count(*) from s )) 
      

  6.   


    SELECT CNUM, CNAME
      FROM C
     WHERE SNUM IN
           (SELECT SNUM
              FROM (SELECT SC.SNUM, COUNT(SC.SNUM) CC FROM SC GROUP BY SC.SNUM)
             WHERE CC = (SELECT COUNT(1) FROM S));
      

  7.   

    create table S
    (
      S#    NUMBER,
      SNAME VARCHAR2(200),
      AGE   NUMBER,
      SEX   NUMBER(1)
    );
    insert into S (S#, SNAME, AGE, SEX)
    values (1, 'a1', 12, 1);
    insert into S (S#, SNAME, AGE, SEX)
    values (2, 'a2', 12, 1);
    insert into S (S#, SNAME, AGE, SEX)
    values (3, 'a3', 12, 1);
    insert into S (S#, SNAME, AGE, SEX)
    values (4, 'b1', 13, 1);
    insert into S (S#, SNAME, AGE, SEX)
    values (5, 'b5', 14, 0);
    commit;create table C
    (
      C#      NUMBER,
      CNAME   VARCHAR2(200),
      TEACHER VARCHAR2(200)
    );
    insert into C (C#, CNAME, TEACHER)
    values (1, '语文', 't1');
    insert into C (C#, CNAME, TEACHER)
    values (2, '数学', 't2');
    insert into C (C#, CNAME, TEACHER)
    values (3, '英语', 't3');
    insert into C (C#, CNAME, TEACHER)
    values (4, '物理', 't4');
    commit;create table SC
    (
      S#    NUMBER,
      C#    NUMBER,
      GRADE VARCHAR2(200)
    );
    insert into SC (S#, C#, GRADE)
    values (1, 1, 'g1');
    insert into SC (S#, C#, GRADE)
    values (1, 2, 'g1');
    insert into SC (S#, C#, GRADE)
    values (1, 3, 'g1');
    insert into SC (S#, C#, GRADE)
    values (1, 4, 'g1');
    insert into SC (S#, C#, GRADE)
    values (2, 4, 'g1');
    insert into SC (S#, C#, GRADE)
    values (4, 2, 'g1');
    insert into SC (S#, C#, GRADE)
    values (4, 3, 'g1');
    commit;select t4.sname "姓名",
           t3.c# "课程编号",
           nvl(t3.cname, '未修课程') "课程名称"
      from c t3
     right join (select t1.sname sname, t2.c# c#
                   from s t1
                   left join sc t2 on t1.s# = t2.s#) t4 on t3.c# = t4.c#
     order by t4.sname
      

  8.   

    接7楼,上面的执行结果如下:
    姓名      课程编号 课程名称
    a1          1 语文
    a1          2 数学
    a1          4 物理
    a1     3 英语
    a2          4 物理
    a3 未修课程
    b1          2 数学
    b1          3 英语
    b5 未修课程
      

  9.   

    下面这条SQL应该可以。
    重新贴,sc的数据变一下truncate table sc;insert into SC (S#, C#, GRADE)
    values (1, 1, 'g1');
    insert into SC (S#, C#, GRADE)
    values (1, 2, 'g1');
    insert into SC (S#, C#, GRADE)
    values (1, 3, 'g1');
    insert into SC (S#, C#, GRADE)
    values (1, 4, 'g1');
    insert into SC (S#, C#, GRADE)
    values (2, 4, 'g1');
    insert into SC (S#, C#, GRADE)
    values (4, 2, 'g1');
    insert into SC (S#, C#, GRADE)
    values (4, 3, 'g1');
    insert into SC (S#, C#, GRADE)
    values (2, 3, 'g1');
    insert into SC (S#, C#, GRADE)
    values (3, 3, 'g1');
    insert into SC (S#, C#, GRADE)
    values (5, 3, 'g1');
    commit;select sc1.c# "课程编号", c.cname "课程名"
      from (select count(s#) snum from s) s1
     inner join (select c# c#, count(c#) cnum from sc group by c#) sc1 on s1.snum =
                                                                          sc1.cnum
     inner join c on sc1.c# = c.c#
          课程编号 课程名
    ---------- ---------------
             3 英语
      

  10.   

    select sname,c#,cname from sc join s on sc.s# = s.s# join c on sc.c# = c.c#
      

  11.   

    select  c.c#,c.cname from c where c.c# in (select c# from (select c# ,count(*) rs from sc group by S# where rs =(select count(*) from s )) 
      

  12.   


    select bb.num from 
    (
    select count(1) num from s
    ) aa
    , (
    select count(1) total ,sc.c# num from c , sc where c.c#=sc.c# group by sc.c# 
    ) bb where aa.num =bb.total