SQL Server练习题2

server

题目2

问题描述:
已知关系模式:
S (SNO,SNAME)                       学生关系。SNO 为学号,SNAME 为姓名
C (CNO,CNAME,CTEACHER)  课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师
SC(SNO,CNO,SCGRADE)        选课关系。SCGRADE 为成绩

要求实现如下5个处理:
  1. 找出没有选修过“李明”老师讲授课程的所有学生姓名
  2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
  3. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名
  4. 列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号
  5. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩

1. 找出没有选修过“李明”老师讲授课程的所有学生姓名
--实现代码:
SELECT SNAME FROM S
WHERE NOT EXISTS(
    SELECT * FROM SC,C
    WHERE SC.CNO=C.CNO
         AND C.CTEACHER='李明'
          AND SC.SNO=S.SNO)

2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
--实现代码:
SELECT S.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE)
FROM S,SC,(
    SELECT SNO
    FROM SC
    WHERE SCGRADE<60
    GROUP BY SNO
    HAVING COUNT(DISTINCT CNO)>=2
)A WHERE S.SNO=A.SNO AND SC.SNO=A.SNO
GROUP BY S.SNO,S.SNAME

3. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名
--实现代码:
SELECT S.SNO,S.SNAME
FROM S,(
    SELECT SC.SNO
    FROM SC,C
    WHERE SC.CNO=C.CNO
        AND C.CNAME IN('1','2')
    GROUP BY SNO
    HAVING COUNT(DISTINCT CNO)=2
)SC WHERE S.SNO=SC.SNO

4. 列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号
--实现代码:
SELECT S.SNO,S.SNAME
FROM S,SC SC1,SC SC2
    WHERE SC1.CNO='1'
        AND SC2.SNO='2'
        AND SC1.CNO=S.CNO
        AND SC1.SCGRADE>SC2.SCGRADE

5. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩
--实现代码:
SELECT SC1.SNO,[1号课成绩]=SC1.SCGRADE,[2号课成绩]=SC2.SCGRADE
FROM SC SC1,SC SC2
WHERE SC1.CNO='1'
        AND SC2.CNO='2'
        AND SC1.SNO=SC2.SNO
        AND SC1.SCGRADE>SC2.SCGRADE

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=384993

[点击此处收藏本文]   发表于 2005年05月31日 17:31:00

 十年等待 发表于2005-06-06 12:04 PM  IP: 61.186.252.*
你好:

1. 找出没有选修过“李明”老师讲授课程的所有学生姓名

SELECT SNAME FROM S
WHERE NOT EXISTS(
SELECT * FROM SC,C <=这里是否要加上S
WHERE SC.CNO=C.CNO
AND CNAME='李明' <=应该是CTEACHER = '李明' 吧
AND SC.SNO=S.SNO)

 
 十年等待 发表于2005-06-06 12:47 PM  IP: 61.186.252.*
列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号
SELECT S.SNO,S.SNAME
FROM S,(
SELECT SC1.SNO
FROM SC SC1,C C1,SC SC2,C C2
WHERE SC1.CNO=C1.CNO AND C1.NAME='1'
AND SC2.CNO=C2.CNO AND C2.NAME='2'
<=这里好像牛头不对马嘴吧??
<=是AND SC2.CNO=C2.CNO AND SC2.SNO='2'才对吧
AND SC1.SCGRADE>SC2.SCGRADE
)SC WHERE S.SNO=SC.SNO

而且“1”号课,就我的理解是course的ID,也就是CNO,怎么会是CNAME,而且这里你还写成了C1.NAME,这种态度要不得阿

我是新手,一般都是上网查资料的,还好以前学了一点点,不然对于那些一点都不会的人,不是被楼主害死了,要么不说,要么就要有认真的态度,直言所至,请楼主谅解

 ghb 发表于2005-11-14 12:04 PM  IP: 61.236.10.*
/*
问题描述:
已知关系模式:
S (SNO,SNAME) 学生关系。SNO 为学号,SNAME 为姓名
C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师
SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩

要求实现如下5个处理:
1. 找出没有选修过“李明”老师讲授课程的所有学生姓名
2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
3. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名
4. 列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号
5. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩
*/

--create table s(sno varchar(10),sname varchar(20))
--create table c(cno varchar(10),cname varchar(20),cteacher varchar(20))
--create table sc(sno varchar(10),cno varchar(20),scgrade integer)

insert into s
select '1','ghb'
union all select '2','tw'
union all select '3','wkp'

insert into c
select '1','语文','李明'
union all select '2','数学','王了'
union all select '3','英语','其它'

insert into sc
select '1','2',50
union all select '1','3',52
union all select '2','1',80
union all select '2','2',90
union all select '2','3',59
union all select '3','1',100
union all select '3','2',59
union all select '3','3',70

--delete from sc where sno = '1' and cno = '1'
select *
from s
select *
from c
select *
from sc
-- 1. 找出没有选修过“李明”老师讲授课程的所有学生姓名
select sname
from s
where s.sno not in (select sc.sno from sc,c where sc.cno = c.cno and c.cteacher = '李明')

SELECT SNAME FROM S
WHERE NOT EXISTS(
SELECT * FROM SC,C
WHERE SC.CNO=C.CNO
AND C.CTEACHER='李明'
AND SC.SNO=S.SNO)

-- 2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
select s.sname,avg(sc.scgrade) as avgsc
from s,sc
where s.sno = sc.sno and s.sno in (select sno from sc where scgrade < 60 group by sno having count(sno) >= 2)
group by s.sname

select s.SNAME,avg(sc.SCGRADE) from S,sc where sc.SCGRADE<60 and s.sno=sc.sno group by s.SNAME having count(sc.SCGRADE)>=2

SELECT S.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE)
FROM S,SC,(
SELECT SNO
FROM SC
WHERE SCGRADE<60
GROUP BY SNO
HAVING COUNT(DISTINCT CNO)>=2
)A WHERE S.SNO=A.SNO AND SC.SNO=A.SNO
GROUP BY S.SNO,S.SNAME

-- 3. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名
select tem.sname
from
(
select s.sname
from s
where s.sno in(select sno from sc where cno = '1')
union all
select s.sname
from s
where s.sno in(select sno from sc where cno = '2')
)tem
group by tem.sname
having count(tem.sname) > 1

select s.sname from s,sc where s.sno=sc.sno and sc.cno=1 and sc.sno in (select b.sno from sc b where b.sno=sc.sno and b.cno=2)

select s.sname from s,sc where s.sno=sc.sno and sc.cno=1 and exists (select b.sno from sc b where b.sno=sc.sno and b.cno=2)

SELECT S.SNO,S.SNAME
FROM S,(
SELECT SC.SNO
FROM SC,C
WHERE SC.CNO=C.CNO
AND C.cno IN('1','2')
GROUP BY SNO
HAVING COUNT(DISTINCT c.CNO)=2
)SC WHERE S.SNO=SC.SNO

-- 4. 列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号
select sc.sno
from sc
where cno = '1' and scgrade > (select scgrade from sc where sno = '2' and cno = '1') and sno <> '2'

SELECT Sc.SNO FROM SC where sc.cno = '1' and exists (select * from sc b where b.sno = sc.sno and sc.scgrade > b.scgrade and b.sno = '2')

select s.SNO from s,sc where s.sno=sc.sno and sc.cno=1 and sc.SCGRADE>(select b.SCGRADE from sc b where b.sno=sc.sno and b.cno=2)

SELECT S.SNO,S.SNAME
FROM S,SC SC1,SC SC2
WHERE SC1.CNO='1'
AND SC2.SNO='2'
AND SC1.CNO=S.CNO
AND SC1.SCGRADE>SC2.SCGRADE

select sc1.sno
from sc sc1,sc sc2
where sc1.cno = '1' and sc1.sno <> '2' and sc2.cno = '1' and sc2.sno = '2' and sc1.scgrade > sc2.scgrade and sc1.cno = sc2.cno

-- 5. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩
select sc1.sno,sc1.scgrade,sc2.scgrade
from sc sc1,sc sc2
where sc1.sno = sc2.sno and sc1.cno = '1' and sc2.cno = '2' and sc1.scgrade > sc2.scgrade

select a.SNO,a.SCGRADE from sc a where (a.CNO=1 or a.CNO=2)
and a.sno in
(select s.SNO from s,sc where s.sno=sc.sno and sc.cno=1 and sc.SCGRADE>(select b.SCGRADE from sc b where b.sno=sc.sno and b.cno=2))

SELECT SC1.SNO,[1号课成绩]=SC1.SCGRADE,[2号课成绩]=SC2.SCGRADE
FROM SC SC1,SC SC2
WHERE SC1.CNO='1'
AND SC2.CNO='2'
AND SC1.SNO=SC2.SNO
AND SC1.SCGRADE>SC2.SCGRADE

drop table s
drop table c
drop table sc

 shenjane 发表于2006-02-07 3:13 PM  IP: 210.22.152.*
第四、第五题都有一些错误
SELECT S.SN,SC1.SCGRADE AS 课程1,SC2.SCGRADE as 课程2 FROM S,SC SC1,SC SC2 WHERE
S.SNO = SC1.SNO AND SC1.CNO='0001'AND SC2.CNO='0002'
AND SC1.SNO=SC2.SNO AND SC1.SCGRADE<SC2.SCGRADE

 

时间: 2025-01-26 12:23:52

SQL Server练习题2的相关文章

SQL Server 练习题3

server 题目3 问题描述:本题用到下面三个关系表:CARD     借书卡.   CNO 卡号,NAME  姓名,CLASS 班级BOOKS    图书.     BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数 BORROW   借书记录. CNO 借书卡号,BNO 书号,RDATE 还书日期备注:限定每人每种书只能借一本:库存册数随借书.还书而改变.要求实现如下15个处理:  1. 写出建立BORROW表的SQL语句,要求定义主码完整性约

SQL Server 练习题1

server 题目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嵌套语句查询选修课

如何用asp把sql server數據轉化為execl文件

server 1.ASP文件: <%@ LANGUAGE="VBSCRIPT" %><%option explicit%><%'EXAMPLE AS:把数据库中一个每天24小时在线人数放到一个EXCEL文件中去'AUTHOR :钢铁工人'EMAIL :hello_hhb@21cn.com'DATE :2001-3-25'TEST :在NT4,SP6,SQL SERVER 7.0,EXCEL2000中测试通过%><HTML><HEAD

.NET和SQL Server中“空值”辨析

server 初学数据库编程我们可能会有一些对"空值"的疑问,比如通过编程新建的一个表中所有数据皆显示为<NULL>,手动添加并删除文字后又变成了空白:一个字符串类型的字段,明明没有填值,却不等于"":用ADO.NET从数据库中取值,每遇到有<NULL>的就出错--这需要我们正确认识.NET和SQL Server中几种不同的"空值".1.真正的空值,也就是"没有输入的值",可以出现在大多数类型的字段中(

SQL Server 2008安装的时提示“重启计算机失败”怎么办?

详细出错信息如下: RebootRequiredCheck 检查是否需要挂起计算机重新启动.挂起重新启动会导致安装程序失败. 失败 需要重新启动计算机.必须重新启动计算机才能安装 SQL Server 出问题后我在网上找的解决方法如下: a .重启机器,再进行安装,如果发现还有该错误,请按下面步骤b.在开始->运行中输入regeditc.到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\d.在右边窗口右击Pe

Sql Server实现自定义拆分字符串函数Split()

经常我们要用到批量操作时都会用到字符串的拆分,郁闷的是SQL Server中却没有自带Split函数,所以我们只能自己动手来解决一下.为了减少和数据库的通讯次数,我们都会利用这种方法来实现批量操作.当然有时我们会借助Execute这个方法来实现,利用这个方法有一个不好的地方就是她只认识以","分割的字符串,在传IDs批量操作的时候还是可以达到目的,但是经常我们要用到更复杂的操作时我们就需要自己动手来完成了...... 1.当我们需要传入很长的字符串是我们可以借助NText和Text类型

恢复整个SQL server数据库还是只恢复错误文件组

这有一个具体例子:如果你有一个单个的出现问题的文件.这个文件有50MB大小,而你的整个数据库 运行着大约有几十亿的字节,这样的话如果能恢复单个失败文件的话就显的非常有意义.这样的事情发生 的一个情景是当文件或者文件组在单独的驱动器上,而驱动器出现了问题.通常,仅仅恢复单个文件或者 文件组会使总的停止时间缩短,因为它明显减少了需要恢复的总的数据量. 现在,为什么你不选择这么做呢?这有一些原因: 你需要有事务日志备份.如果你想从备份中恢复一个文件或者文件组,你同时也需要恢复与它们一起 创建的事务记录

使用SQL Server 2000将现有代码作为Web服务提供

    一.简介 Microsoft SQL Server 2000的 XML功能可以简化将现有代码作为 Web服务提供的任务.本文集中讨论了传入和传出 Transact SQL代码的数据与 XML消息(在 Web服务客户机和服务器之间使用)之间的转换. 二.SQL Server 2000中的现有代码 SQL Server 2000的 XML功能简化了将现有 Transact SQL代码作为 Web服务提供的过程.这依赖于 SQL Server 2000中的两项 XML功能: 1.对 Trans

SQL Server Replication 中关于视图的点滴

    在服务器A数据库TEST新建了一个本地发布(Local Publications)RPL_GES_MIS_TEST,在服务器B数据库RPL_TEST上创建了一个本地订阅(Local Subscriptions),它订阅了了这个发布RPL_GES_MIS_TEST.如下截图所示,本地发布只有DB_OBJECTS .Location两个表 假设现在有一个需求,我们需要同步一个视图V_DB_OBJECTS(当然实际情况应该比这个复杂,有可能视图是多个表关联,测试场景我们先简化一下),视图代码如