数据库实验报告

时间:2024.4.20

附件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 数据库技术是编程人员们心血的结晶,里面包含了大量新的定义和函数,我们只是简单的运用它们都感到困但万分了。

最后,我还想说一句,面对困难要有迎难而上的勇气,万事开头难嘛,以后会慢慢好起来的。如果在一开始就放弃,那就注定是一个失败者。这就是我对课程设计这门实践课的最大体会。

更多相关推荐:
数据库实验报告——

实验一SQLServer基本使用与数据定义一实验目的1掌握企业管理器及查询的定义方法使用方法2熟悉数据库建模及ER图的画法3掌握SQLServer中数据库及数据表的建立与管理方法4掌握数据的导入导出及数据库备份...

数据库实验报告

实验一SQLServer基本使用与数据定义一实验目的1掌握服务管理器企业管理器及查询分析器基本使用方法2熟悉数据库建模及ER图的画法3掌握SQLServer中数据库及数据表的建立与管理方法4掌握数据的导入导出及...

数据库实验报告(SQL)

SQLServer实验报告学号姓名专业信息管理与信息系统目录实训一数据库的基本操作实训二表实训三数据完整性实训四索引实训五数据查询实训六视图实训七TransactSQL程序设计实训八存储过程实训九触发器实训十S...

数据库设计实验报告

HEFEIUNIVERSITY数据库设计报告题目产品销售系统系别电子信息与电气工程系班级09级电气信息类5班学号0905075034姓名黄张祥指导老师方小红完成时间20xx510目录1问题描述311背景312数...

数据库实验报告范本

重庆大学经济与工商管理学院实验报告课程名称数据库原理及应用实验学期20xx年至20xx年第2学期学生所在学院经济与工商管理学院年级20xx专业班级电子商务01班学生姓名kcy学号指导教师签名实验最终成绩经管学院...

数据库实验报告

实验二数据库的简单查询连接查询组合查询和统计查询一实验目的1使用SQLSever查询分析器的使用方法2加深TransatSQL语言的查询语句的理解3熟练掌握简单表的数据查询数据排列和数据连接查询的操作方法4熟练...

SQL数据库实验报告

数据库系统及应用实验报告设计课题SQL20xx数据库安装及数据库建立专业班级山东大学通信二班小组成员王指导教师设计时间20xx12121题目一课程目的1学习安装SQLServer20xx2学习使用SQLServ...

数据库实验报告

数据库实验报告组长:组员:班级:指导教师:主要任务:1.分析题意,画出E-R图,将E-R图转换为关系模式并进行模式优化。2.SQLServer2008环境下编写SQL代码,创建视图、触发器、存储过程和游标。组员…

数据库实验报告

实验报告五游标存储过程与触发器一实验目的掌握使用TSQL实现游标存储过程和触发器的创建使用方法二实验内容在实验一实验二创建的表中用TSQL语句完成以下内容1使用游标实现将SC表中及格的选课信息输出usestud...

数据库实验报告1

河北科技大学实验报告级专业班学号年月日姓名同组人指导教师实验名称数据定义数据操纵语言成绩实验类型批阅教师一实验目的熟悉SQLServer上机环境以及SQLServer客户端的配置熟练掌握和使用DDL语言建立修改...

数据库实验报告

实验内容与要求请有选择地实践以下各题1基于教学管理数据库jxgl使用SQL的查询语句表达下列查询检索年龄大于23岁的男学生的学号和姓名SELECTSnoSnameFROMStudentWHERESsex男AND...

数据库实验报告

数据库实验报告实验名称数据库查询操作实验目的熟悉数据库查询掌握SQL查询语句的使用方法实验环境SQLServer20xx实验内容及结果1检索供应零件给编号为J1的工程的供应商编号SNO2检索供应零件给工程J1且...

数据库实验报告(30篇)