首页 > 数据库 > SQL Server > 正文

SQL Server 练习题1

2024-08-31 00:49:20
字体:
来源:转载
供稿:网友

题目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))

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表