西工大数据库实验报告 下载本文

from spj except

select distinct jno from spj

where spj.sno in ( )

select distinct sno from s

where s.city='天津'

5.查询这样的工程:供给该工程的零件P1的平均供应量大于供给工程J1的任何一种零件的最大供应量。

select jno from spj where pno='p1' group by jno having avg(qty)>

(select max(qty) from spj

where spj.jno='j1')

6. 针对实验一创建的Student数据库进行下面的数据查询(10分,每小题5分)

(1) 求不选修C语言课程的学生学号。

select sno from s except select sno from sc where cno=

(select cno from c

where cname='c语言')

(2) 求这样的学生姓名:该学生选修了全部课程并且其中一门课在90分以上。

17

select sname from s where sno in (select sno from sc where sno in (

select sno from s

where not exists (select * from c

where not exists (select * from sc

where sno=s.sno and cno=c.cno)

)

)

group by sno

having max(grade)>90 )

4. 实验3:视图操作和安全性控制

4.1. 目的和要求

1. 掌握使用图形用户界面和SQL语言创建,操作和删除视图的方法。

2. 掌握SQL Server中的安全性相关的登录名,角色以及用户的创建以及使用方法。3. 学会使用T-SQL语句对数据库和表操作的灵活控制功能。

4.2. 实验准备

1. 了解与视图相关的各种SQL语句。

18

2. 了解登录名,角色以及用户的创建以及使用方法。

3. 了解T-SQL语句在对数据库和表的控制权限相关命令(GRANT/REVOKE)的用法。

4.3. 实验内容

1. 在Student数据库中,利用图形用户界面,创建一个选修了数据库课程并且是1986年

出生的学生的视图,视图中包括学号,性别,成绩这三个信息。(5分)

操作工程:右击“视图”,将相关的表添加进去,然后指定视图所依附的表间的连接关系,最后指出视图的输出(即视图的各个属性列),操作界面如下图所示:

2. 用两种不同的SQL语句创建课本128页第11题中要求的视图(视图名:V_SPJ)(6分,

每种方法3分)。

方法一:create view V_SP as

select sno,pno,qty from spj

where spj.jno in as

(select jno from j

where j.jname='三建')

方法二:create view V_SPJ

19

select sno,pno,qty from spj,j

where j.jno=spj.jno and

j.jname='三建'

3. 用SQL语句完成课本128页第11题中对视图V_SPJ的查询(4分,每小题2分)。

语句:select pno,sum(qty) 总量 from V_SPJ group by pno 运行界面:

语句:

select * from V_SPJ where sno='s1' 运行界面:

4. 用T-SQL语句操作视图的数据。(15分,每题5分)

(1) 给视图V_SPJ中增加一条数据(基本表中有插入的数据即可)。

insert into V_SPJ

values('s5','j3',900)

说明:必须将主键约束去掉并且允许为空值以后才可插入

(2) 修改视图V_SPJ中的任意一条数据的供应数量。

update V_SPJ set qty=111

20