《数据库原理与应用》实验题目及答案 下载本文

FROM sc y WHERE y.sno=x.sno)

运行结果:

sno cno grade

--------- ---- --------------------------------------- 201313101 1 92.0 201313101 3 88.0 201313102 2 90.0

--[3_29] 查询其他系中比计算机科学系某一学生年龄小的学生学号、姓名和年龄。

select sname,sage from student

where sage'cs'

运行结果:

sname sage -------- ------ 王敏 18 张立 19

--[3_30] 查询其他系中比计算机科学系所有学生年龄都小的学生学号、姓名和年龄。

select sname,sage from student

where sage'cs'

运行结果:

sname sage -------- ------ 王敏 18

--[3_31] 查询所有选修了1号课程的学生学号、姓名。

SELECT sno,sname FROM student WHERE EXISTS (SELECT * FROM sc

WHERE sno=student.sno AND cno='1');

运行结果:

sno sname --------- -------- 201313101 李勇

--[3_32] 查询没有选修1号课程的学生学号、姓名。

SELECT sno,sname

11

FROM student WHERE NOT EXISTS

(SELECT * --此处*可换为sno FROM sc

WHERE sno=student.sno AND cno='1');

运行结果:

sno sname --------- -------- 201313102 刘晨 201313103 王敏 201313104 张立

--[3_33] 查询选修了全部课程的学生姓名。

SELECT sname --查询这样的学生y FROM student

WHERE NOT EXISTS --不存在课程x (SELECT * FROM course

WHERE NOT EXISTS --学生y不选修x (SELECT *

FROM sc

WHERE sno=student.sno --表SC与Student自然连接 AND cno=course.cno)) --表SC与course自然连接

运行结果:

sname --------

--[3_34] 查询至少选修了学生201313102选修的全部课程的学生号码。SELECT DISTINCT sno --查询这样的学生的x FROM sc SCX

WHERE NOT EXISTS --不存在这样的课程y (SELECT * FROM sc SCY

WHERE SCY.sno='201313102' AND --学生选修了y NOT EXISTS --学生x没有选修y (SELECT * FROM sc SCZ

WHERE SCZ.sno=SCX.sno AND SCZ.cno=SCY.cno))

运行结果:

sno --------- 201313101 201313102

4. 集合查询

--[3_35] 查询计算机科学系的学生及年龄不大于19岁的学生。

12

SELECT * FROM student WHERE sdept='cs' UNION SELECT *

FROM student WHERE sage<=19

运行结果:

sno sname ssex sage sdept --------- -------- ---- ------ --------------------

201313101 李勇 男 20 CS 201313102 刘晨 女 19 CS 201313103 王敏 女 18 MA 201313104 张立 男 19 IS

--[3_36] 查询选修了课程1或者选修了课程2的学生。

SELECT sno FROM sc WHERE cno='1' UNION SELECT sno FROM sc WHERE cno='2'

运行结果:

sno --------- 201313101 201313102

--[3_37] 查询计算机科学系的学生与年龄不大于19岁的学生的交集。SELECT * FROM student WHERE sdept='cs' INTERSECT SELECT * FROM student WHERE sage<=19

运行结果:

sno sname ssex sage sdept --------- -------- ---- ------ --------------------

201313102 刘晨 女 19 CS

--[3_38] 查询选修课程1的学生集合与选修课程2的学生集合的交集。SELECT sno FROM sc WHERE cno='1' INTERSECT

13

SELECT sno FROM sc WHERE cno='2'

运行结果:

sno --------- 201313101

--[3_39] 查询计算机科学系的学生与年龄不小于19岁的学生的差集。

SELECT * FROM student WHERE sdept='cs' EXCEPT SELECT * FROM student WHERE sage>19

运行结果:

sno sname ssex sage sdept --------- -------- ---- ------ --------------------

201313102 刘晨 女 19 CS

5.综合

--[3_40] 学士学位授予条件为:至少选修了1、3、4号3门学位课程,每门学位课必须及格且学位课平均成绩在75分以上。查询cs系可授予学士学位的学生名单。

select * from student

where sdept='cs' and sno in (select sno from sc

where cno in('1','3','4') and grade>=60

group by sno having count(sno)=3 and avg(grade)>=75)

运行结果:

sno sname ssex sage sdept --------- -------- ---- ------ --------------------

--[3_41] 学士学位授予条件为:至少选修了'数据库','操作系统','数据结构'3门学位课程,每--门学位课必须及格且学位课平均成绩在75分以上。查询cs系可授予学士学位的学生名单。

select * from student

where sdept='cs' and sno in (select sno from sc

where grade>=60 and cno in (select cno from course

where cname in('数据结构','数据库','操作系统'))

14

group by sno having count(sno)=3 and avg(grade)>=75)

运行结果:

sno sname ssex sage sdept --------- -------- ---- ------ --------------------

--[3_42] 统计每个学生(含未选修课程的学生)的学分。注意:不及格课程无学分。

SELECT student.sno 学号,sname 姓名,sum(ccredit) 学分 FROM sc JOIN course ON sc.cno=course.cno JOIN student ON student.sno = sc.sno Where grade>=60

Group by student.sno,sname

运行结果:

学号 姓名 学分 --------- -------- ----------- 201313101 李勇 8 201313102 刘晨 2

5. 插入(INSERT)、修改(UPDATE)和删除(DELETE)语句的使用 --[3_43] 插入一条选课记录( '201313103','1')。

if not exists(select *

from sc

where sno='201313103' and cno='1') INSERT INTO sc(sno,cno)

VALUES ('201313103','1') --新插入的记录在Grade列上取空值

运行结果:

(1 行受影响)

--[3_44] 对每一个系,求学生的平均年龄,并把结果存入数据库。 --第1步:建表,第2步:插入子查询结果

use ST

IF EXISTS(SELECT name FROM sysobjects

WHERE name = 'DeptAge' AND type = 'U')

DROP TABLE DeptAge --若表Deptage已存在,则先删除再重建 GO

CREATE TABLE DeptAge

(sdept CHAR(2), --系名 avgage SMALLINT) --学生平均年龄

运行结果:

命令已成功完成。

--[3_45] 复制表 ⑴先建立与sc表结构完全相同的表sc1,sc2 ⑵再将sc复制到sc1中。

use ST

IF EXISTS(SELECT name FROM sysobjects

WHERE name = 'sc1' AND type = 'U') DROP TABLE sc1

15