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

英语 decimal(5,1) check(英语 between 0 and 150), 综合 decimal(5,1) check(综合 between 0 and 300))

IF EXISTS(SELECT name FROM sysobjects WHERE name = 'V_gk') drop view V_gk --若GH_view已存在,则删除 go

create view V_gk (考号,姓名,语文,数学,英语,综合,总分) --总分为虚拟列 as select 考号,姓名,语文,数学,英语,综合,语文+数学+英语+综合 from GK

运行以上程序建立高考表“GK”及视图“V_gk”。

--[4_11] 将学生的学号及他的平均成绩定义为一个视图。

IF EXISTS (SELECT name FROM sysobjects WHERE name='V_avg') drop view V_avg --若V_avg已存在,则删除 GO

CREATE VIEW V_avg(sno,gavg) AS

SELECT sno,AVG(grade) FROM sc

GROUP BY sno --分组视图 --[4_12] 将student表中所有女生记录定义为一个视图。 方法1:

IF EXISTS(SELECT name FROM sysobjects WHERE name ='V_fs') drop view V_fs --若V_fs已存在,则删除 GO

CREATE VIEW V_fs (sno,sname,sex,age,dept) AS SELECT sno,sname,ssex,sage,sdept FROM student WHERE ssex='女'

--当基表Student增加属性列时,不会破坏Student表与V_fs视图的映象关系。

--[4_13] 建立视图V_good (修课成绩在平均成绩之上的元组)。

IF EXISTS(SELECT name FROM sysobjects WHERE name = 'V_good') drop view V_good --若V_good已存在,则删除 GO

CREATE VIEW V_good AS

SELECT sno,cno,grade FROM sc

WHERE grade> (SELECT AVG(grade) --该视图应属行列子集视图 FROM sc) --[4_14] 建立1号课程的选课视图,并要求透过该视图进行的更新操作只涉及1号课程, --同时对该视图的任何操作只能在工作时间进行。

IF EXISTS(SELECT name FROM sysobjects WHERE name = 'V_sc') drop view V_sc --若V_sc已存在,则删除 go

CREATE VIEW V_sc

21

AS

SELECT sno,cno,grade FROM sc

WHERE cno='1'

and datepart(weekday,GETDATE()) BETWEEN 2 and 6 --星期一至星期五 and datepart(hour,GETDATE()) BETWEEN 9 and 17 --9:00至17:00 WITH CHECK OPTION 3.视图的查询与更新

--[4_15] 在信息系学生的视图中找出所有女学生。 SELECT * FROM V_is1 WHERE ssex='女' --[4_16] 查询信息系选修了1号课程的学生 SELECT V_is1.* FROM V_is1,sc

WHERE V_is1.sno=sc.sno AND sc.cno='1'

--[4_17] 在V_avg视图中查询平均成绩在90分以上的学生学号和平均成绩 SELECT * FROM V_avg WHERE gavg>=90

--[4_18] 将信息系学生视图V_is1中学号200215124的学生姓名改为“张三”。 UPDATE V_is1

SET sname= '张三'

WHERE sno= '200215124'

--[4_19] 向信息系学生视图V_is1中插入一个新的学生记录:200215129,赵新,女,18,is

INSERT

INTO V_is1

VALUES('200215129','赵新','女',18,'is')

--[4_20] 删除视图V_is1中学号为200215124的记录 DELETE

FROM V_is1

WHERE sno='200215124' (二) 自定内容

五、出现的问题及解决方法

实验5 T_SQL基本程序设计

完成以下实验报告:

《数据库原理与应用》实验报告

院名 学号 专业 姓名 年级 教师 班级 成绩 一、实验题目

实验5 T_SQL基本程序设计 二、实验环境

操作系统:Windows XP。

数据库管理系统:MS SQL Server 2000 或MS SQL Server 2008。

22

三、实验目的

1.掌握T_SQL语言中顺序、分支、循环三种控制结构的语句。 2.掌握T_SQL语言中系统函数的使用方法。 3.学会使用T_SQL语句编写基本程序。 四、实验内容 (一) 规定内容

2

[5_1] 求方程ax+bx+c=0的根。

declare @a real,@b real,@c real declare @da real,@p real,@q real select @a=5,@b=5,@c=3 set @da=@b*@b-4*@a*@c if @da>=0 begin

print '方程有如下2个实根:'

print 'x1='+ltrim(str((-@b+sqrt(@da))/(2*@a),10,2)) print 'x2='+ltrim(str((-@b-sqrt(@da))/(2*@a),10,2)) end else begin

select @p=-@b/(2*@a),@q=sqrt(-@da)/(2*@a)

print '方程有如下2个共轭虚根:'

print 'x1='+ltrim(str(@p,10,2))+'+'+ltrim(str(@q,10,2))+'i' print 'x2='+ltrim(str(@p,10,2))+'-'+ltrim(str(@q,10,2))+'i' end

方程有如下2个共轭虚根: x1=-0.50+0.59i x2=-0.50-0.59i

[5_2] 查询全体学生的sno、sname、ssex、sdept,对于ssex,若是“男” 则显示“男生”,若是“女”'则显示“女生”。

select sno,sname, ssex=case ssex

when '男' then '男生' when '女' then '女生' end,sdept from student

[5_3] 对选修表按成绩的分数段显示A(90~100)、B(80~89)、C(70~79)、D(60~69)、E(0~59)五个等级。

SELECT sno 学号,cno 课号, 绩等级=CASE

When grade>=90 then 'A? When grade >=80 then 'B' When grade >=70 then 'C' When grade >=60 then 'D'

23

Else 'E' End FROM sc

[5_4] 将某待查学生姓名赋给变量@s,查询该学生记录,若不存在则输出“查无此人!”。 declare @s char(8) set @s='张三'

if exists (select * from student where sname=@s) select * from student where sname=@s else

print '查无此人!'

[5_5] 求100以内所有奇数的和。 declare @i int, @s int select @i=1,@s=0 while @i<=100

select @s=@s+@i,@i=@i+2 select s=@s

[5_6] 求语句“I am student.”中各字母的ASCⅡ码。 declare @i int,@n int, @str char(60),@s char(1) select @str='I am student.',@n=len(@str),@i=1 print '字母 ASCⅡ' while @i<=@n begin

select @s=substring(@str,@i,1), @i=@i+1

if not(@s>='a' and @s<='z' or @s>='A' and @s<='Z') continue

print @s+str(ascii(@s)) end

运行结果: 字母 ASCⅡ I 73 a 97 m 109 s 115 t 116 u 117 d 100 e 101 n 110 t 116

[5_7] 求语句“I am student.”中各字母出现的频率及其ASCⅡ码,重复字母只求1次ASCⅡ码。

24

[5_8] 在20秒钟内,每隔10秒显示系统时间。

[5_9] 对选修2号课分数作如下处理:若2号课平均分低于70分则普加5分,如此反复循环,当最高分为100分时退出循环。

Use ST

Declare @gradeavg decimal(5,1)

While (select avg(grade) from sc where cno='2')<70 Begin

If (select max(grade)+5 from sc where cno='2')>100 break

Update sc set grade=grade+5 where cno='2' end

select @gradeavg=avg(grade) from sc where cno='2' select [2号课平均成绩]=@gradeavg

[5_10]

(二) 自定内容

五、出现的问题及解决方法

实验6 存储过程

完成以下实验报告:

《数据库原理与应用》实验报告

院名 学号 专业 姓名 年级 教师 班级 成绩 一、实验题目 实验6 存储过程 二、实验环境

操作系统:Windows XP。

数据库管理系统:MS SQL Server 2000 或MS SQL Server 2008。 三、实验目的

1.理解建立与调用存储过程语句的格式和功能。 2.掌握各种存储过程的建立与调用方法。

3.能根据数据库应用的需要编写有实用价值的存储过程。 四、实验内容 (一) 规定内容

[6_1] 建立存储过程:查询某系学生的学号、姓名、学分及所在系。只有及格课程才能拿学分。

[6_2] 建立文本加密存储过程:查询所有系学生的学号、姓名、学分及所在系。

[6_3] 学士学位授予条件为:至少选修了'数据库','操作系统','数据结构'3门学位课程,每门学位课必须及格且学位课平均成绩在75分以上。建立存储过程:查询某系可授予学士学位的学生名单,含学号、姓名、所在系、学位课平均分。

[6_4] 学士学位授予条件为:①修满学校规定的学分(输入参数);②至少选修了'数据库

25