--S (S#,SN,SD,SA)   S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄
--C (C#,CN )        C#,CN       分别代表课程编号、课程名称
--SC ( S#,C#,G )    S#,C#,G     分别代表学号、所选修的课程编号、学习成绩
CREATE TABLE S(
S# VARCHAR(50),
SN VARCHAR(50),
SD VARCHAR(50),
SA VARCHAR(50),
)CREATE TABLE C(
C# VARCHAR(50),
CN VARCHAR(500)
)CREATE TABLE SC(
S# VARCHAR(50),
C# VARCHAR(50),
G VARCHAR(50)
)insert c values ('c1','税收基础')
insert c values ('c2','B')
insert c values ('c3','C')
insert c values ('c4','D')
insert c values ('c5','E')
insert c values ('c6','F')insert s values ('1','a','1a','')
insert s values ('2','b','2b','')
insert s values ('3','c','3c','')
insert s values ('4','d','4d','')
insert s values ('5','e','5e','')
insert s values ('6','f','6f','')insert sc values ('1','c1','80')
insert sc values ('4','c2','60')
insert sc values ('2','c3','0')
insert sc values ('2','c1','70')
insert sc values ('3','c4','90')
insert sc values ('4','c3','88')
insert sc values ('4','c5','84')
insert sc values ('5','c1','80')
insert sc values ('5','c2','60')
insert sc values ('5','c3','0')
insert sc values ('5','c4','90')
insert sc values ('5','c5','84')
insert sc values ('5','c5','59')
insert sc values ('5','c6','100')现在要查询  查询选修全部课程的学员姓名和所属单位,如何写sql各位

解决方案 »

  1.   

    select a.[S#],a.[C#],a.sn,a.sd
    from sc a,s
    where a.[s#]=s.[s#]
    group by [S#],[C#],sn,sd
    having(count(*)=(select cout(*) from c ))
      

  2.   

    CREATE TABLE S(  [S#] VARCHAR(50),  SN VARCHAR(50),  SD VARCHAR(50),  SA VARCHAR(50),  )   
     CREATE TABLE C(  [C#] VARCHAR(50),  CN VARCHAR(500)  )    
    CREATE TABLE SC(  [S#] VARCHAR(50),  [C#] VARCHAR(50),  G VARCHAR(50)  )      insert c values ('c1','税收基础')  
    insert c values ('c2','B')  
    insert c values ('c3','C')  
    insert c values ('c4','D') 
     insert c values ('c5','E') 
     insert c values ('c6','F')    insert s values ('1','a','1a','')  
    insert s values ('2','b','2b','') 
     insert s values ('3','c','3c','')  
    insert s values ('4','d','4d','')  
    insert s values ('5','e','5e','')  
    insert s values ('6','f','6f','')    insert sc values ('1','c1','80')  
    insert sc values ('4','c2','60') 
     insert sc values ('2','c3','0')  
    insert sc values ('2','c1','70')  
    insert sc values ('3','c4','90')  
    insert sc values ('4','c3','88')  
    insert sc values ('4','c5','84')  
    insert sc values ('5','c1','80')  
    insert sc values ('5','c2','60')  
    insert sc values ('5','c3','0')  
    insert sc values ('5','c4','90') 
     insert sc values ('5','c5','84')
      insert sc values ('5','c5','59') 
     insert sc values ('5','c6','100')   
     select a.[S#],s.sn,s.sd
    from sc a,s
    where a.[s#]=s.[s#]
    group by a.[S#],sn,sd
    having(count(distinct [C#])=(select count(*) from c ))
    S#                                                 sn                                                 sd
    -------------------------------------------------- -------------------------------------------------- --------------------------------------------------
    5                                                  e                                                  5e(1 行受影响)
      

  3.   

    select sn,sd
    from s
    where not exists(
    select *
    from c
    where not exists(
    select *
    from sc
    where s#=s.s#
    and c#=c.c#))
    注:掌握not exists用法很有好处
      

  4.   


    select sn,sd
    from s
    where not exists(
        select *
        from c
        where not exists(
            select *
            from sc
            where s#=s.s# and c#=c.c#))    
      

  5.   


    select s.*
    from s,(select s#
    from sc
    group by s#
    having count(distinct c#)=(select count(*) from c )) b
    where s.s#=b.s#
      

  6.   

    SQL 语言中exists,代表‘存在’,带有exists的子查询不返回任何数据,只返回代表‘不’的true和代表‘肯定’的false.not exists表示不存在。选修全部课程的学员姓名和所属单位 用逻辑来表达就是‘任意’课程‘他都选’,转换之后,就变成‘没有’一门课程‘他不选’。第一个not exists代表‘没有’,中间的‘select *
      from c’表示‘一门课程’,因为是从c中选的嘛,第二个not exists 表示‘不’,下面的select *
    from sc
    where s#=s.s#
    and c#=c.c#表示他选,合起来就是‘他不选’
    注:参见王珊的数据库系统概论 第三版 P113
      

  7.   

    with tmp 
    as(
    select s#,count(c#) as count1 from (
    select distinct s#,c# from sc)tb group by s# )
    select sn,sd from s where s# in(select s# from tmp where count1 = (select distinct count(c#) from c) )