题目1 
问题描述:
为管理岗位业务培训信息,建立3个表:
s (s#,sn,sd,sa)   s#,sn,sd,sa 分别代表学号、学员姓名、所属单位、学员年龄
c (c#,cn )        c#,cn       分别代表课程编号、课程名称
sc ( s#,c#,g )    s#,c#,g     分别代表学号、所选修的课程编号、学习成绩
要求实现如下5个处理:
  1. 使用标准sql嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名
  2. 使用标准sql嵌套语句查询选修课程编号为’c2’的学员姓名和所属单位
  3. 使用标准sql嵌套语句查询不选修课程编号为’c5’的学员姓名和所属单位
  4. 使用标准sql嵌套语句查询选修全部课程的学员姓名和所属单位
  5. 查询选修了课程的学员人数
  6. 查询选修课程超过5门的学员学号和所属单位
1. 使用标准sql嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名 
--实现代码:
select sn,sd from s
where [s#] in(
    select [s#] from c,sc
    where c.[c#]=sc.[c#]
        and cn=n'税收基础')
2. 使用标准sql嵌套语句查询选修课程编号为’c2’的学员姓名和所属单位
--实现代码:
select s.sn,s.sd from s,sc
where s.[s#]=sc.[s#]
    and sc.[c#]='c2'
3. 使用标准sql嵌套语句查询不选修课程编号为’c5’的学员姓名和所属单位
--实现代码:
select sn,sd from s
where [s#] not in(
    select [s#] from sc 
    where [c#]='c5')
4. 使用标准sql嵌套语句查询选修全部课程的学员姓名和所属单位
--实现代码:
select sn,sd from s
where [s#] in(
    select [s#] from sc 
        right join c on sc.[c#]=c.[c#]
    group by [s#]
    having count(*)=count(distinct [s#]))
5. 查询选修了课程的学员人数
--实现代码:
select 学员人数=count(distinct [s#]) from sc
6. 查询选修课程超过5门的学员学号和所属单位
--实现代码:
select sn,sd from s
where [s#] in(
    select [s#] from sc 
    group by [s#]
    having count(distinct [c#])>5)
trackback: http://tb.blog.csdn.net/trackback.aspx?postid=384967
[点击此处收藏本文] 发表于 2005年05月31日 17:08:00
 yzluji 发表于2005-06-06 4:04 pm  ip: 61.186.252.*
sql练习一:第四题答案是不是有问题?是否应改为 
select sn,sd from s 
where [s#] in( 
select [s#] from sc 
group by [s#] 
having count(*)=(select count(*) from c)) 
 
 [email protected] 发表于2005-07-15 11:03 am  ip: 61.186.252.*
select * from s where s# in( 
select s# from sc 
group by s# 
having count( distinct c#)= (select count(*) from c)) 
多一个distinct是否更好呢。比如,可能一些没有及格人或者其他情况考了2次,嘿嘿。
 shenjane 发表于2006-02-07 9:58 am  ip: 210.22.152.*
第四题好像有错误: 
select sn,sd from s 
where [s#] in (select [s#] from sc 
group by [s#] 
having count(*)= (select count(distinct c#) from c))
新闻热点
疑难解答