附件1:
经济管理学院实验报告
姓名: 班级: 学号: 实验成绩:
课程名称: 数据库应用课程设计
指导教师:
实验名称: SQL Server2008数据库应用课程设计
20 ## 年 6 月25 日
实验目的:
1.熟练掌握数据库设计技术。
2.熟练掌握数据库查询语句及其应用。
3.掌握数据库综合应用能力。
实验环境:;数据库管理系统SQL Server2008
实验内容与步骤:
实验内容:
已知选课数据库myGrade包含学生、课程、教师、选课和授课等5个关系表,各表及其列名含义如下(主键已用下画线标记):
学生(学号,姓名,性别,出生日期,班级)
课程(课程编号,课程名称,前修课程,课程性质,学分)
教师(教师编号,姓名,性别,出生日期,职称)
选课(学号,课程编号,选课学期,成绩)
授课(教师编号,课程编号,授课学期)
1.创建数据库myGrade,在数据库中创建上述5个关系数据表,要求使用非中文的表名和列名,并在各表中插入模拟数据。在建表时必须定义各表的主键、外键、CHECK等约束条件。具体要求如下:
(1) 学生表和教师表中的性别取值“M”或“F”分别表示“男”或“女”;学号长度为8位,第一位以字母开头,最后一位为性别(即F或M),其他6位为数字。
(2) 课程表中的前修课程为外键,它参照自己所在表中的主键列(即“课程编码”);课程性质分为“必修课”和“选修课”两类,必修课用字母A表示,选修课用字母B表示;学分取值0.5~10之间。
(3) 选课学期和授课学期都为11位字符串,例如“2010-2011-1”。其中前9位表示学年(年份之间用横杆分隔),最后一位表示某个学年中的学期序号,取值1或2。
(4) 其他列的类型、长度、外键及CHECK等约束条件根据选课数据库语义自行定义。
(5) 在插入模拟数据之后,为各个外键中的每一列创建非聚集索引。
实验步骤:
1.建立学生成绩管理数据库mygrade
Create database mygrade
….
create database myGrade
2.数据库mygrade的各个表的创建
1)学生表 Studentsdents
create table Studentsdents(
sno char (8)check(sno like '[a-z][0-9][0-9][0-9][0-9][0-9][0-9][FM}') primary key ,
sname char (10),
sex char (2),
birthdate datetime,
classname char(10) )
select *from Studentsdents
insert into Studentsdents
values ('a123456F','李伟','F','1992-05-06','2')
insert into Studentsdents
values ('b123456F','张伟','F','1992-01-25','1')
insert into Studentsdents
values ('c123456F','雷晔','F','1991-06-06','1')
insert into Studentsdents
values ('d123456M','丁丽','M','1992-05-29','2')
insert into Studentsdents
values ('e123456F','王伟','F','1992-03-23','2')
insert into Studentsdents
values ('f123456M','李丽','M','1992-05-28','2')
insert into Studentsdents
values ('g123456M','张露露','M','1991-11-25','1')
insert into Studentsdents
values ('h123456F','丁明明','F','1992-08-23','1')
insert into Studentsdents
values ('i123456M','马力','M','1991-12-25','2')
insert into Studentsdents
values ('j123456M','徐丽','M','1992-05-06','2')
2)课程表Courses
create table courses(
cno char(8) primary key,
cname char(10),
beforecno char (8) references courses(cno) ,
xingzhi char (1) check(xingzhi like'[AB]'),
xuefen float check(xuefen between 0.5 and 10.0 ))
select *from courses
insert into courses (cno,cname,xingzhi,xuefen)
values ('001','数据库','A',8.0)
insert into courses (cno,cname,xingzhi,xuefen)
values ('002','c语言','B',8.5)
insert into courses (cno,cname,xingzhi,xuefen)
values ('003','电子商务','B',10.0)
insert into courses (cno,cname,xingzhi,xuefen)
values ('004','管理','B',8.0)
insert into courses (cno,cname,xingzhi,xuefen)
values ('005','经济','A',9.0)
insert into courses
values ('006','数据运行','001','A',8.0)
insert into courses
values ('007','机械制造','002','A',5.0)
insert into courses
values ('008','信息管理','003','B',5.0)
insert into courses
values ('009','数据结构','004','B',5.0)
insert into courses
values ('010','网页设计','005','B',5.0)
3教师表teacher
create table teachers (
tno char (8) check(tno like '[a-z][0-9][0-9][0-9][0-9][0-9][0-9][FM}')primary key ,
tname char(10),
sex char(1) check(sex like'[FM]'),
birthdate datetime,
title char(8))
select *from teachers
insert into teachers
values ('a123789F','达尔文','F','1969-08-06','教授')
insert into teachers
values ('b123789F','丁力','F','1972-10-11','副教授')
insert into teachers
values ('c123456M','张丽','M','1984-05-25','导师')
insert into teachers
values ('d123789M','李华芳','M','1989-12-05','助教')
insert into teachers
values ('e123789F','王选','F','1968-05-25','教授')
insert into teachers
values ('f123789M','周晓丽','M','1986-04-26','助教')
insert into teachers
values ('g123789M','吕丽霞','M','1973-12-06','副教授')
insert into teachers
values ('h123789F','郑华','F','1982-10-26','导师')
insert into teachers
values ('i123789M','巩清','M','1983-11-13','导师')
insert into teachers
values ('j123789M','张宏','M','1988-03-26','助教')
学生选课表stucourses
create table studcourses (
sno char(8) references Studentsdents(sno),
cno char(8) references courses(cno),
xuankexuqi char(11)check( xuankexuqi like '[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]-[12]'),
grade float,
constraint pk_ primary key(sno,cno) )
select *from studcourses
insert into studcourses
values ('a123456F','001','2011-2012-2',48)
insert into studcourses
values ('b123456F','002','2012-2013-1',45)
insert into studcourses
values ('d123456M','002','2009-2010-2',90)
insert into studcourses
values ('d123456M','003','2012-2013-2',66)
insert into studcourses
values ('f123456M','004','2011-2012-2',85)
insert into studcourses
values ('f123456M','005','2010-2011-1',48)
insert into studcourses
values ('a123456F','003','2011-2012-2',75)
insert into studcourses
values ('c123456F','007','2012-2013-1',45)
insert into studcourses
values ('c123456F','008','2012-2013-1',68)
insert into studcourses
values ('a123456F','004','2011-2012-2',58)
教师授课表teacourses
create table shoucourses (
tno char(8) references teachers(tno),
cno char(8) references courses(cno),
shoukexueqi char(11)check( shoukexueqi like '[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]-[12]'),
constraint pk_2 primary key (tno,cno))
select *from shoucourses
insert into shoucourses
Values ('a123789F','003','2012-2013-1')
insert into shoucourses
Values ('a123789F','004','2011-2012-2')
insert into shoucourses
Values ('b123789F','006','2012-2013-1')
insert into shoucourses
Values ('b123789F','007','2011-2012-2')
insert into shoucourses
Values ('b123789F','002','2011-2012-2')
insert into shoucourses
Values ('a123789F','001','2012-2013-1')
insert into shoucourses
Values ('c123789M','002','2011-2012-2')
insert into shoucourses
Values ('c123789M','003','2012-2013-1')
insert into shoucourses
Values ('c123789M','001','2012-2013-1')
insert into shoucourses
Values ('d123789M','007','2011-2012-2')
3. 编写T-SQL语句,完成下列各项功能
(1) 根据学生成绩表中的数据显示全部学生的成绩,要求按班级、学号的次序显示,输出内容中包括学生姓名和课程名称,并使用中文标题。
select sname 学生姓名 ,cname 课程名称,grade 成绩 from Studentsdents st,courses c,studcourses sd
where st.sno=sd.sno and sd.cno=c.cno
order by st.sno
(2) 根据学生基本信息表与成绩表中的数据,显示姓名为x的这个学生第一学期的全部课程成绩。
select sname 学生姓名 ,grade 成绩 from Studentsdents st,studcourses sd
where st.sno=sd.sno and sname='李伟' and xuankexuqi <='2012-2013-1'
(3) 根据课程表与成绩表中的数据,显示输出课程名称为x.的该课程的平均成绩及格人数比例。
select avg (grade )平均成绩 , 1.0*(select COUNT(*) from studcourses where grade/100.0>= 0.6)/(select COUNT(*) from Studentsdents) from courses c,studcourses sd
where c.cno=sd.cno and cname='数据库'
(4) 根据课程表与成绩表中的数据,显示学号为x的这个学生最近这个学期所得到的学分数。
select sum(xuefen )学分 from studcourses sd ,courses c
where c.cno=sd.cno and sd.sno='a123456F'
select top 1 sname 学生姓名, COUNT(*)c from studcourses st,courses c,Studentsdents sd
where st.cno=c.cno and sd.sno=st.sno
group by sname
Order by c desc
(5) 根据各表数据,列出最近这个学期哪些学生选修的课程数量最多,要求列出姓名。
select top 1 sname ,COUNT(*)b from studcourses a ,Studentsdents st,courses c
where a.sno=st.sno and a.cno=c.cno
group by sname
Order by b desc
(6) 根据各表数据,列出最近这个学期哪些学生至少选了两门或两门以上的选修课程,要求列出姓名。
(7) 根据课程表与成绩表数据,列出哪些选修课程学生选修的学生人数最多。
select top 1 cname from studcourses a ,Studentsdents st,courses c
where c.cno=a.cno and xingzhi ='B'
group by cname
Order by COUNT(*) desc
(8) 分别列出课程名称为X的这门课程考试成绩排名前5位与后5位的学生姓名。
select top 5 sname from Studentsdents st,studcourses sc
where sc.sno=st.sno and sc.cno='002'
order by grade desc
select top 5 sname from Studentsdents st,studcourses sc
where sc.sno=st.sno and sc.cno='002'
order by grade asc
(9) 列出必修课程成绩不及格其累计学分超过15分的那些学生的姓名。
select sname from Studentsdents st,courses c,studcourses a
where c.cno=a.cno and a.sno=st.sno and xingzhi ='A' and grade <60 and (select SUM (xuefen ) from courses )>15
group by sname
(10) 列出课程名称为x的这门课考试成绩平均分最高的班级。
select top 1 classname from studcourses a ,Studentsdents st,courses c
where c.cno=a.cno and a.sno=st.sno and cname='c语言'
group by classname
order by AVG(grade) desc
(11) 分班级和性别,输出最近这个学期全部必修课课程的平均考试成绩。
select AVG(grade),classname,sex from studcourses a,courses c,Studentsdents st
where c.cno=a.cno and a.sno=st.sno and xingzhi ='A' and xuankexuqi='2012-2013-1'
group by classname,sex
(12) 根据成绩表中的数据,计算学生基本信息表中每个学生每个学期的平均考试成绩。
select AVG(grade),st.sno,xuankexuqi from studcourses a,Studentsdents st
where a.sno=st.sno
group by st.sno,xuankexuqi
(13) 列出第2011-1学期中各个班级平均考试成绩排名前5位学生的姓名,要求按各班按成绩排序
select top 5 sname ,AVG(grade)grade from studcourses a ,Studentsdents st
where a.sno=st.sno and xuankexuqi='2010-2011-1'
group by sname,classname
(14) 将成绩表中选修课的成绩按五级制(优、良、中、及格、不及格)形式进行输出。
(14 select sno,c.cno,'grade'=case
when grade between 85 and 100 then '优'
when grade between 75 and 85 then '良'
when grade between 70 and 75 then '中'
when grade between 60 and 70 then '及格'
when grade between 0 and 59 then '不及格'
else 'erroer'
end
from studcourses a,courses c
where a.cno=c.cno and xingzhi ='B'
(15)将成绩表中必修课成绩按实际分数输出,同时选修课的成绩按五级制形式输出。
select sno,c.cno,grade from studcourses a,courses c
where a.cno=c.cno and xingzhi ='A'
select sno,c.cno,'grade'=case
when grade between 85 and 100 then '优'
when grade between 75 and 85 then '良'
when grade between 70 and 75 then '中'
when grade between 60 and 70 then '及格'
when grade between 0 and 59 then '不及格'
else 'erroer'
end
from studcourses a,courses c
where a.cno=c.cno and xingzhi ='B'
(19)查询每个学期中平均成绩都在班级排名前30%的学生的姓名。
19.select a.sno,sname,class,AVG(grade) avg into tmp from students as a,xk as b
where a.sno=b.sno
group by class ,a.sno,sname
select sno ,sname,class ,row_number()over(partition by class order by avg) as id into tmp1 from tmp
select class,COUNT(*)*0.3 count into tmp2 from tmp1
group by class
select a.sname from tmp1 a,tmp2 b
where a.class=b.class and id<count
select st.sno,sname,classname ,AVG(grade) 平均 into tmp from Studentsdents a,studcourses st
where st.sno= a.sno
group by classname ,st.sno,sname
select sno ,sname,classname ,ROW_NUMBER()over(partition by classname order by 平均) id into tmp1 from tmp
select classname,COUNT(*)*0.3 count into tmp2 from tmp1
group by classname
select st.sname from tmp1 a,tmp2 b
where a.classname=b.classname and id<count
(20)计算姓名为x的这个学生第2011-1学期平均成绩在班级中的排名名次。
select sname,名次 from(select sname,avg(grade) 平均成绩 ,dense_rank() over(order by avg(grade)desc) 名次
from Studentsdents st,studcourses a
where st.sno=a.sno
group by sname) as p where p.sname='雷晔'
(21) 查询选修过“数据库”和“数据结构”这两门课程的学生姓名。
select st.sno,sname from Studentsdents st ,courses c,studcourses a
where a.cno=c.cno and st.sno= a.sno and cname='数据结构' and st.sno in (select st.sno from Studentsdents st ,courses c,studcourses a
where a.cno=c.cno and st.sno= a.sno and cname='数据库' )
(22) 查询没有选修过“数据库”这门课程的学生姓名
select sname from Studentsdents
where sno not in(select st.sno from Studentsdents st ,courses c,studcourses a
where a.cno=c.cno and st.sno= a.sno and cname ='数据库')
(23) 查询选修过“数据库”但没有选修其先行课的学生姓名。
select st.sno,sname from studentsdents st,courses c,studcourses a
where a.cno=c.cno and st.sno= a.sno and cname ='数据库'and st.sno not in (
select sd.sno from studcourses sd, courses o,studcourses su where o.cno=sd.cno and su.sno=sd.sno
and o.cno =(select beforecno from courses where cname='数据库'))
(24)查询所有课程成绩全部及格的学生姓名。
drop table tmp1
select st.sname d into tmp1 from studentsdents st,studcourses a
where st.sno= a.sno and grade <60 or grade is NULL
select distinct st.sname from studcourses a,tmp1 ,Studentsdents st
where st.sno=a.sno and st.sname not in (select d from tmp1 )
25. (25) 查询每个学期必修课成绩全部及格的学生姓名
drop table tmp1
select st.sname d into tmp1 from studentsdents st,studcourses a ,courses c
where grade <60 and st.sno= a.sno and xingzhi ='A' or grade is NULL
select distinct st.sname from studentsdents st,tmp1,studcourses a
where st.sno=a.sno and st.sname not in (select d from tmp1 )
26(做不出).(26) 查询选修过教师“达尔文”所授的全部课程的学生姓名。
select *from tmp
select cno into tmp from shoucourses s,teachers t
where tname='达尔文' and t.tno=s.tno
select distinct st.sname from Studentsdents st ,tmp b ,studcourses a
where a.sno=st.sno and b.cno=a.cno
(27)查询哪些学生选修的课程中其前修课程还没有选修过。
select distinct sname from Studentsdents st, studcourses a ,courses c
where st.sno=a.sno and c.cno = a.cno and c.beforecno is NULL
(28(做不出)查询哪些学生至少选修了学号为“S105401F”这个学生选修的全部课程。
select c.cno cno,c.pcno pcno into tmp1 from students s,courses c,xk
where s.sno=xk.sno and xk.cno=c.cno and s.sno='S105401F'
select c.cno cno,c.pcno pcno,s.sname name into tmp2 from students s,courses c,xk
where s.sno=xk.sno and xk.cno=c.cno and s.sno<>'S105401F'
select tmp2.name name into tmp3 from tmp1,tmp2
where tmp1.cno=tmp2.cno
select tmp3.name from tmp3
(30) 查询哪些学生没有选修过教师“达尔文”所授的任何一门课程
select tno into tmp from teachers t where t.tname='达尔文'
select distinct st.sname from courses c,Studentsdents st,studcourses a,tmp t
where st.sno= a.sno and t.cno=a.cno
(31)(做不出) 查询哪些学生至少选修了教师“达尔文”所授的两门不同的课程。
(32) 查询2011学年哪些老师授课们数最多。
select distinct top 1 tname,count(*) 授课数 from shoucourses s,teachers t,courses c
where s.tno=t.tno and c.cno=s.cno
group by tname
(33) 查询2011学年哪些老师选修课学生选课人数最多。
(34) 查询哪些学生已经获得的必修课学分不少于7,选修课学分不少于8
select sum(xuefen)必修课学分,sname from Studentsdents st,courses c,studcourses a
group by sname,a.sno,a.cno,xingzhi,st.sno,c.cno
having xingzhi='A'and a.cno=c.cno and st.sno=a.sno and sum(xuefen)>=7
select sum(xuefen)选修课学分,sname from Studentsdents st,courses c,studcourses a
group by sname,a.sno,a.cno,xingzhi,st.sno,c.cno
having xingzhi='B'and a.cno=c.cno and st.sno=a.sno and sum(xuefen)>=8
(35) 建立一个存储过程,输入一个学生的姓名,返回该学生全部必修课课程的平均成绩。
create procedure mygrade @name char(10)
as
declare @avg float
select @avg=AVG(grade) from Studentsdents st,courses c,studcourses a
where a.cno=c.cno and st.sno=a.sno and xingzhi='A' and sname=@name
print @avg
return (@avg)
declare @avg float
execute @avg=myGrade '李丽'
print @avg
(36) 建立一个存储过程,输入一门课程的编号以及要求查询成绩的区间(x~y),
输出该课程所有在该区间内的学生姓名,要求成绩从高到低排序。
drop procedure stuname
create procedure stuname @cno char(8),@x int,@y int
as
select sname,grade from Studentsdents st,courses c,studcourses a
where a.cno=c.cno and st.sno=a.sno and grade between @x and @y and a.cno=@cno
execute stuname '003','44','80'
(37) 建立一个存储过程,输入一个学生的学号,列出该学生最近这个学期的全部课程的成绩,
并通过调用该存储过程,编写程序,输出所有学生最近这个学期全部课程的成绩。
drop procedure grade
create procedure grade @sno char(10)
as
select sname,grade from Studentsdents st,courses c,studcourses a
where a.cno=c.cno and st.sno=a.sno and @sno=st.sno
execute grade 'a123456F'
(38) 建立一个是用户定义表值函数,输入一个课程名称,输出该课程考试成绩最高的这些学生的姓名。
drop function top1xushen
create function top1xushen (@cname char(10))
returns table
as
return (select sname,grade from Studentsdents st,courses c,studcourses a
where a.cno=c.cno and st.sno=a.sno and grade=(select max(grade)
from Studentsdents st,courses c,studcourses a where
a.cno=c.cno and st.sno=a.sno and c.cname=@cname ))
go
select sno,sname from Studentsdents
where sname in(select sname from top1xushen ('数据库') )
(39) 编写一个用户定义函数,要求:输入一个课程编码,根据成绩表,
计算并返回该课程全部学生考试成绩的平均值与及格率,并通过调用该函数,
编写一个存储过程计算列出课程表中全部课程考试成绩的平均值与及格率。
drop function grade
drop procedure grade
create function grade (@cno char (12))
returns table
as
return (select avg(grade)平均值,(select COUNT(*) from studcourses
where cno=@cno and grade >=60 )* 1.0/ (select COUNT(*) from studcourses
where cno=@cno ) 及格率 from studcourses where cno=@cno)
go
select *from grade ('002')
(40) **************编写一个用户定义函数,输入一个学号和学年号,
计算返回该学生该学年的综合智育成绩,计算公式如下16题所示。
要求借助该用户定义函数,使用UPDATE语句,计算每个学生每个学年的综合智育成绩。
(41) 编写一个存储过程,输入一个学年号和学生学号,
返回该学生在该学年中综合智育成绩的排名名次。
drop procedure ranks
create procedure ranks @xuankexuqi char (20),@sno char(12)
as
declare @rank int
select st.sno,xuankexuqi,RANK() over(order by grade ) as rank into tmp from Studentsdents st,studcourses a
where xuankexuqi=@xuankexuqi and a.sno=st.sno
select @rank =RANK from tmp where tmp.sno=@sno
select @rank 排名名次
execute ranks '2011-2012-2','a123456F'
(42)编写一个用户定义表值函数,输入一个学号与学期号,
输出返回该学生该学期的全部课程及其成绩。
DROP function cnamegrade
create function cnamegrade (@sno char(15),@xuankexuqi char(20) )
returns table
as
return (select a.sno,c.cno,cname,grade from studentsdents st,studcourses a,courses c
where a.sno=st.sno and a.cno=c.cno and a.sno=@sno and xuankexuqi=@xuankexuqi)
go
select * from cnamegrade('a123456F','2011-2012-2' )
(43) **************创建一个存储过程,输入一门课程的编号,利用递归CTE,输出该课程的所有前修课程(包括前修课程的前修课程)。
(44) 建立一个存储过程,输入一门课程的编号以及要求查询成绩的区间(x~y),
使用游标逐条输出该课程所有在该区间内的学生姓名,要求成绩从高到低排序,输出格式如下:
课程编号:xxx 课程名称:xxx
----------------------------------------------------------------
学号 姓名 成绩
x1 xx1 xxx1
x2 xx2 xxx2
drop procedure myprocedure
IF( OBJECT_ID('myproc') IS NOT NULL)
drop procedure myproc
go
create procedure myproc @courid nvarchar(5),@x int,@y int
as
declare @stuid nvarchar(8),@course nvarchar(40),@student nvarchar(40),@score int
select @course=cname from courses where cno=@courid
print space(10)+'课程编号:'+@courid+space(10)+'课程名称:'+@course
print replicate('-',80)
print '学号'+space(14)+'姓名'+space(16)+'成绩'
declare mycursor cursor for
select a.sno,sname,grade from studentsdents st,studcourses a
where a.sno=st.sno and cno=@courid and grade between @x and @y
order by grade desc
open mycursor
fetch next from mycursor into @stuid,@student,@score
while @@fetch_status=0
begin
print @stuid+space(10)+@student+space(11)+str(@score,2)
fetch next from mycursor into @stuid,@student,@score
end
deallocate mycursor
go
execute myproc '002',40,100
Go
(45)编写一个存储过程,要求:输入一个学生的学号,按以下格式输出该学生全部课程的成绩单。要求使用cursor,输出格式如下:
学号:××××××××× 姓名:×××
序号 课程名称 课程性质 开课学期 成绩 排名
1 高等数学 必修课 2010-1 89 12
2 英语 必修课 2010-1 75 23
……
20 数据库技术 必修课 2011-2 85 8
21 物流管理 选修课 2011-2 92 1
……
(46)建立一个存储过程,输入一个学期号,利用游标按班级和学号的次序输出该学期全部学生的考试成绩,格式如下:
学期:*******
学号:××××××××× 姓名:×××
序号 课程名称 课程性质 成绩
1 高等数学 必修课 89
2 英语 必修课 75
……
20 数据库技术 必修课 85
21 物流管理 选修课 92
……
及格门数:***,不及格门数:**,本学期获得总学分:**
(47) ***********建立一个存储过程,输入一门课程的名称,利用游标而不直接利用函数,计算并返回该课程考试成绩的平均值与方差。
(48) 创建一个带参数@start,@number的存储过程,利用游标,
将表学生表中第@start行开始的共@number条记录拷贝到表mytable中去。
(49) 创建一个带参数@start,@number的存储过程,利用游标,
将表学生表副本中第@start行开始的共@number条记录删除。
(50) 建立一个触发器,当课程表中插入一条记录时,
触发器自动对该记录的正确性进行验证,并根据验证结果作出拒绝插入记录或予以提示警告等处理。
记录正确性验证规则如下:
①课程编号长度必须为4;必修课课程的编码以大写字母’A’开头,
选修课课程的编码以大写字母’B’开头,否则拒绝插入记录;
②必修课课程总门数不超过30门,否则予以提示警告。
if OBJECT_ID('courses1') is not null
drop table courses1
select * into courses1 from courses
go
create trigger mytrigger1 on courses1 for insert
as
declare @cno char(5),@ctype char(2)
select @CNO=cno,@ctype=xingzhi from inserted
if(LEN(@cno)<>4)
begin
print 'error'
rollback transaction
end
if(@ctype='a' and @cno NOT like 'a%')
begin
print 'error'
rollback transaction
end
if(@ctype='b' and @cno NOT like 'b%')
begin
print 'error'
rollback transaction
end
if(select count(*) from courses1
Where xingzhi='A' )>=30
begin
print 'error'
rollback transaction
end
go
实验心得与体会(至少800字):
实践心得
数据库是一门很实用的课程,与我们的日常生活息息相关,大名鼎鼎的淘宝,还有赶集网,同城
这些网站都有运用数据库,想想看,面对海量的数据,如果没有一个合适的管理软件,这些网站怎么运行下去
其实,我们学的数据库,不仅用在这些电子商务的网站,同时很多公司运用数据库的技术处理其数据。数据库的运用范围很广,典型的领域包括事务处理﹑管理决策﹑电子商务﹑计算机辅助设计﹑计算机集成制造﹑计算机图行分析与处理以及人工智能等系统。
对于数据的处理是一件复杂的事情,因为我们的数据不是一个,两个,而是成千上万,每天面对如此之多的数据,单靠我们人工处理是不现实的,所以数据库技术诞生。
在做数据库题目时,我感到我对课本上的知识有了一个新的认识,而且对同一道题目,可以有不同的做法,对于上机实验,这种理论联系实际的做法,我感觉对于我们巩固知识点特别有效
对于数据库中的重点,数据检索,数据库的管理与创建,T-SQL 程序设计,做了一番温习,以前光听老师在课上讲,没有做太多的实践练习,现在专门抽出时间,对这些内容做具体的梳理。
当然,做了那么多题目,感触最深的是,上机练习要仔细,容不得你马虎大意,很多时候错用了中文标点,反反复复把代码运行了好多次都失败,浪费了大量的实践。还有就是对学生表﹑课程表﹑教师表﹑选课表,授课表的设定不合理,往往代码对了,但是运行结果却不如人意。
通过这次试验,我受益匪浅,一方面加深了我对课本知识的理解,另一方面我能使用数据库做一些简单的操作,比方说,我能做一些简单的查询,也会使用条件查询,对于视图,也会用一些,可以尝试建立一个较简单的存储过程,也会用游标了。
还有,通过这次试验,我懂得了编程人员的艰辛,我们使用的SQL Server 数据库技术是编程人员们心血的结晶,里面包含了大量新的定义和函数,我们只是简单的运用它们都感到困但万分了。
最后,我还想说一句,面对困难要有迎难而上的勇气,万事开头难嘛,以后会慢慢好起来的。如果在一开始就放弃,那就注定是一个失败者。这就是我对课程设计这门实践课的最大体会。