英语 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