题目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))
新闻热点
疑难解答