2023年6月21日发(作者:)

SQL数据库课程设计实训报告

2011 ~ 2012 )学年第 2 学期)

姓 名:

学 号:

专 业:

班 级:

指导教师:

( SQL数据库实训报告

日 期

项目名称

2012.6.18-2012.6.22

SQL数据库课程设计

能够熟练掌握并灵活运用SQLServer2005软件,初步具备开发有一定使用价值数据库应用系统能力。

地 点 科技楼205

实训目的能力目标

实训要求:

1、实训期间每天登记考勤,作为实训成绩的一部分。

2、实训期间不能玩游戏、看电影、小说等做与学习无关的事。如果有不遵守的同学将取消当天成绩。

3、完成整个实训以后,要求每人写出实训报告。作为评定整个实训成绩的重要参考依据。

实训内容(过程及步骤)

2、使用T-SQL语句,在数据库student中创建如下student表.(注:要求表字段取英文名)

create table student

(S_no char(11) not null primary key,

S_name char(8) not null,

S_sex char(2) null check(S_sex='男' or S_sex='女') default('男'),

S_brith datetime null default(getdate()),

S_address varchar(30) null,

S_class varchar(10) null, )

INSERT student

VALUES('','刘晶晶','女','1985-4-14','湖南株洲','信息')

INSERT student

VALUES('','周天','男','1984-4-20','广东广州','信息')

INSERT student

VALUES('','张以能','女','1985-10-2','湖南长沙','信息')

INSERT student

VALUES('','曾建桥','男','1984-1-22','湖南株洲','信息')

INSERT student

VALUES('','王玉梅','女','1986-5-18','湖南株洲','电商')

INSERT student

VALUES('','李婷','女','1986-6-10','湖北武汉','软件')

INSERT student

VALUES('','谭桂香','女','1984-7-25','湖南长沙','软件')

3、使用T-SQL语句,在数据库student中创建如下course表.(注:要求表字段取英文名)(10分) CREATE TABLE course

(c_no varchar NOT NULL,

c_name varchar NOT NULL,

c_credit CHAR(2) NOT NULL,

c_type CHAR(10) NOT NULL)

INSERT course

VALUES('1203dzswzjs','电子商务网站建设','4','专业课')

INSERT course

VALUES('1002sjkyl','数据库原理与应用','4','专业基础课')

INSERT course

VALUES('1003xmkf','项目开发','2','专业课')

INSERT course

VALUES('1003c#_w','C#的windows程序开发','4','专业课')

4、使用T-SQL语句,在数据库student中创建如下score表.(注:要求表字段取英文名)(10分)

CREATE TABLE score

(s_no char(11) not null,

semester char(8) not null,

c_no varchar(12) not null,

grade decimal(5))

INSERT score

VALUES('','','1203dzswwzjs','98')

INSERT score

VALUES('','','1002sjkyl','96')

INSERT score

VALUES('','','1003xmkf','87')

INSERT score

VALUES('','','1003c#_w','92')

INSERT score

VALUES('','','1003c#_w','76')

INSERT score

VALUES('','','1003c#_w','83')

INSERT score

VALUES('','','1003c#_w','87')

5.在student 表中添加一个长为 20 个字符,名为S_major的类型为CHAR的列:

alter table student

add s_major char(20)

6、修改学生“周天”的家由“广东广州”搬到“湖南株洲”。

update student

set S_address='湖南株洲'

where S_name='周天'

7. 将班级为“”课程号为“1003c#_w”,的成绩统一设置为75。

update score set grade=75

where left(S_no,8)='' and C_no='1003c#_w'

8. 查询全体学生的姓名、学号、所在班级。

select S_no,S_name,S_class

from student

9. 查询全体学生的姓名及其年龄。

select S_name,year(getdate())-(year(S_brith)) 年龄

from student

10.查询全体学生的学号、姓名和年龄,同时以汉字标题来表示学号、姓名和年龄。

select S_no 学号,S_name 姓名,year(getdate())-(year(S_brith)) 年龄

from student

11、查询学号为’’考试成绩80分以上的学生学号、课程号、学期和成绩并显示汉字标题。

select S_no 学号,C_no 课程号,semester 学期,grade 成绩

from score

where S_no='' and grade>80

12.查询年龄在18至22岁之间的学生的S_name(姓名)、S_class(班级)、和Nl(年龄不是基本表中的字段,是计算出来的字段)。

select S_name 姓名,S_class 班级,year(getdate())-year(S_brith) N1

from student

where (year(getdate())-year(S_brith))>18 and

(year(getdate())-year(S_brith))<22

13.查询家庭地址为“湖南株洲”和“湖南长沙”班学生的详细信息。

select *

from student

where S_address='湖南株洲' or S_address='湖南长沙'

14.查询缺少成绩的学生的学号和相应的课程号。

select S_no,C_no

from score

where grade=null

15.查询所有选修过课程的学生的学号。

select S_no

from score

where C_no is not null

16.查询课程号为“1003c#_w”的成绩为前三名的学生的学号和成绩。

select top 3 S_no,grade

from score

where C_no='1003c#_w'

order by grade desc

17.查询选修了“1003c#_w”课程的学生的学号及其成绩,查询结果按分数的降序排列。

select S_no,grade

from score where C_no='1003c#_w'

order by grade desc

18.查询’ ’班各门课程最高成绩,并显示最高成绩大于80的课程号和最高成绩。

select C_no,max(grade)

from score

where left(S_no,8)=''

group by C_no

having max(grade)>80

19、查询每个学生的S_no(学号)、S_name(姓名)、S_class(班级)及其所选修课程的成绩情况。

select student.S_no,S_name,S_class,grade

from student,score

where student.S_no=score.S_no and C_no is not null

20.查询比“王玉梅”年龄大或同龄的学生的学号、姓名和出生年份,结果按出生年月升序排列。

select S_no,S_name,S_brith

from student

where (year(getdate())-year(S_brith))>=

(select (year(getdate())-year(S_brith))

from student

where S_name='王玉梅')

order by S_brith

21、查询与“刘晶晶”在同一个班学习的学生。

select *

from student

where left(S_no,8)=''

22.查询其他班级中比“信息021 ”班任一学生年龄小的学生信息。

select *

from student

where (year(getdate())-year(S_brith))>

(select min(year(getdate())-year(S_brith)) from student where S_class='信息')

23.查询所有选修了“1003c#_w”课程的学生S_no(学号)和S_name(姓名)。

select student.S_no,S_name

from student,score

where student.S_no=score.S_no and C_no='1003c#_w'

24、查询选修了课程名为“数据库原理与应用”的学生学号和姓名。

select student.S_no,S_name

from student,score,course

where student.S_no=score.S_no and score.C_no=course.C_no and C_name='数据库原理与应用'

25、建立关于student表的s_no列的聚集索引。

create unique clustered index stu_index on student(S_no)

26.建立关于course表的c_no列的惟一非聚集索引。

create unique

index cou_index on course(C_no)

27.建立关于score表的s_no列和c_no列的复合非聚集索引。

create nonclustered

index sco_index on score(C_no)

28.创建一个关于学生成绩的视图,要求含有学号,姓名,课程号,课程名和成绩列。

create view view1

as

select score.S_no,S_name,C_no,grade

from student,score

where student.S_no=score.S_no

29.创建关于学生信息的视图stu_info_view,使之仅包含学生的学号、姓名和性别等基本信息。

create view stu_info_view

as

select *

from student

30.从视图grade_view中查询达到80分以上的成绩。

create view grade_view

as

select grade

from score

where grade>=80

31.通过视图stu_info_view向表student中插入一条记录。

INSERT INTO stu_info_view values('','王红','女','1987-3-2','湖南长沙','电商','')

32、更新s_no为“”的学生的姓名为“王勇”,成绩增加2分。

update score

set grade=grade+2

from student,score

where student.S_no=score.S_no and S_name='王勇' and student.S_no=''

33、创建一存储过程,检索信息021班学生的记录。

create procedure proc1

as

select *

from student

where S_class='信息'

34、创建一存储过程GetCredit,通过用户输入课程号,输出学分。

创建:

create procedure GetCredit @课程号char(11),@学分char(2) output as

set @学分= (select C_credit from course where C_no=@课程号)

print @学分

查询:

declare @课程号char(11),@学分char(2)

set @课程号='1003c#_w'

exec GetCredit @课程号,@学分

35、 创建关于性别的默认,默认值为‘男’,并将其绑定到数据表student的s_sex列上。

创建默认值:create default sex_def as'男'

绑定默认值:exec sp_bindefault 'sex_def','student.S_sex'

36、 为数据表score的grade列设置CHECK约束,使grade列的值在0~100之间。

alter table score

add constraint che check(grade>=0 and grade<=100)

37、 为数据表score时,为s_no和c_no设置PRIMARY KEY约束和FOREIGN KEY约束。

ALTER TABLE score

ADD CONSTRAINT PK_SCORE_SNO PRIMARY KEY(S_no)

ALTER TABLE score

ADD CONSTRAINT PK_SCORE_CNO FOREIGN KEY(C_no)

38、为数据表score创建一个UPDATE触发器。当试图修改数据表score中的记录时,检查修改后记录中的s_no(学号)是否在数据表information存在,同时c_no(课程号)是否在数据表course中存在,若不是同时存在,则撤消UPDATE操作,并返回一条错误消息。

create trigger tri on score

after update

as

declare @学号 char(11),@s_no char(11),@课程号 varchar(12),@c_no varchar(12)

select @学号=S_no from inserted

select @s_no=S_no from student

select @课程号=C_no from inserted

select @c_no=C_no from course

begin

if not exists(

select * from inserted where S_no in(select S_no from student)

)

begin

raiserror('学号不存在!',16,1)

rollback

end

if not exists(

select * from inserted where C_no in(select C_no from course)

)

begin raiserror('课程号不存在!',16,1)

rollback

end

end

39、利用游标逐行显示对表course的查询结果,并按课程号排序,显示课程号和课程名称。

DECLARE cur CURSOR FOR

SELECT C_no,C_name FROM course order by C_no

OPEN cur

FETCH next FROM cur

WHILE @@FETCH_STATUS=0

BEGIN

FETCH next FROM cur

END

DEALLOCATE cur

实训心得:

为期5天的实训很快就过去了,让我重新了解了丰富多彩的编程生活,感受到了学习的快乐,也感觉到了许许多多的专业问题。

在实训期间,我学到了许多东西,遇到了一些困难,也就看到了自己本身存在许多问题。

这次实训给我带来了危机感和压迫力,同时也让我更加清楚自己的水平,心里总有种被大石头压着的无力感,但又凭着一股坚持,奋力的抗争着。所以也得出一个结论:我得好好努力啊。

真的很感谢学校能够给我们这样的实训机会,让我明白了只有多做才能熟能生巧,游刃有余,同时我也认识到要做一个合格的设计工作者并非想象的那么容易,总重要的还是细致严谨。社会不会要一个一无是处的人,所以我们应该尽快明确自己的方向和目标并为之努力奋斗。

分数:

教师签名: 年 月 日

2023年6月21日发(作者:)

SQL数据库课程设计实训报告

2011 ~ 2012 )学年第 2 学期)

姓 名:

学 号:

专 业:

班 级:

指导教师:

( SQL数据库实训报告

日 期

项目名称

2012.6.18-2012.6.22

SQL数据库课程设计

能够熟练掌握并灵活运用SQLServer2005软件,初步具备开发有一定使用价值数据库应用系统能力。

地 点 科技楼205

实训目的能力目标

实训要求:

1、实训期间每天登记考勤,作为实训成绩的一部分。

2、实训期间不能玩游戏、看电影、小说等做与学习无关的事。如果有不遵守的同学将取消当天成绩。

3、完成整个实训以后,要求每人写出实训报告。作为评定整个实训成绩的重要参考依据。

实训内容(过程及步骤)

2、使用T-SQL语句,在数据库student中创建如下student表.(注:要求表字段取英文名)

create table student

(S_no char(11) not null primary key,

S_name char(8) not null,

S_sex char(2) null check(S_sex='男' or S_sex='女') default('男'),

S_brith datetime null default(getdate()),

S_address varchar(30) null,

S_class varchar(10) null, )

INSERT student

VALUES('','刘晶晶','女','1985-4-14','湖南株洲','信息')

INSERT student

VALUES('','周天','男','1984-4-20','广东广州','信息')

INSERT student

VALUES('','张以能','女','1985-10-2','湖南长沙','信息')

INSERT student

VALUES('','曾建桥','男','1984-1-22','湖南株洲','信息')

INSERT student

VALUES('','王玉梅','女','1986-5-18','湖南株洲','电商')

INSERT student

VALUES('','李婷','女','1986-6-10','湖北武汉','软件')

INSERT student

VALUES('','谭桂香','女','1984-7-25','湖南长沙','软件')

3、使用T-SQL语句,在数据库student中创建如下course表.(注:要求表字段取英文名)(10分) CREATE TABLE course

(c_no varchar NOT NULL,

c_name varchar NOT NULL,

c_credit CHAR(2) NOT NULL,

c_type CHAR(10) NOT NULL)

INSERT course

VALUES('1203dzswzjs','电子商务网站建设','4','专业课')

INSERT course

VALUES('1002sjkyl','数据库原理与应用','4','专业基础课')

INSERT course

VALUES('1003xmkf','项目开发','2','专业课')

INSERT course

VALUES('1003c#_w','C#的windows程序开发','4','专业课')

4、使用T-SQL语句,在数据库student中创建如下score表.(注:要求表字段取英文名)(10分)

CREATE TABLE score

(s_no char(11) not null,

semester char(8) not null,

c_no varchar(12) not null,

grade decimal(5))

INSERT score

VALUES('','','1203dzswwzjs','98')

INSERT score

VALUES('','','1002sjkyl','96')

INSERT score

VALUES('','','1003xmkf','87')

INSERT score

VALUES('','','1003c#_w','92')

INSERT score

VALUES('','','1003c#_w','76')

INSERT score

VALUES('','','1003c#_w','83')

INSERT score

VALUES('','','1003c#_w','87')

5.在student 表中添加一个长为 20 个字符,名为S_major的类型为CHAR的列:

alter table student

add s_major char(20)

6、修改学生“周天”的家由“广东广州”搬到“湖南株洲”。

update student

set S_address='湖南株洲'

where S_name='周天'

7. 将班级为“”课程号为“1003c#_w”,的成绩统一设置为75。

update score set grade=75

where left(S_no,8)='' and C_no='1003c#_w'

8. 查询全体学生的姓名、学号、所在班级。

select S_no,S_name,S_class

from student

9. 查询全体学生的姓名及其年龄。

select S_name,year(getdate())-(year(S_brith)) 年龄

from student

10.查询全体学生的学号、姓名和年龄,同时以汉字标题来表示学号、姓名和年龄。

select S_no 学号,S_name 姓名,year(getdate())-(year(S_brith)) 年龄

from student

11、查询学号为’’考试成绩80分以上的学生学号、课程号、学期和成绩并显示汉字标题。

select S_no 学号,C_no 课程号,semester 学期,grade 成绩

from score

where S_no='' and grade>80

12.查询年龄在18至22岁之间的学生的S_name(姓名)、S_class(班级)、和Nl(年龄不是基本表中的字段,是计算出来的字段)。

select S_name 姓名,S_class 班级,year(getdate())-year(S_brith) N1

from student

where (year(getdate())-year(S_brith))>18 and

(year(getdate())-year(S_brith))<22

13.查询家庭地址为“湖南株洲”和“湖南长沙”班学生的详细信息。

select *

from student

where S_address='湖南株洲' or S_address='湖南长沙'

14.查询缺少成绩的学生的学号和相应的课程号。

select S_no,C_no

from score

where grade=null

15.查询所有选修过课程的学生的学号。

select S_no

from score

where C_no is not null

16.查询课程号为“1003c#_w”的成绩为前三名的学生的学号和成绩。

select top 3 S_no,grade

from score

where C_no='1003c#_w'

order by grade desc

17.查询选修了“1003c#_w”课程的学生的学号及其成绩,查询结果按分数的降序排列。

select S_no,grade

from score where C_no='1003c#_w'

order by grade desc

18.查询’ ’班各门课程最高成绩,并显示最高成绩大于80的课程号和最高成绩。

select C_no,max(grade)

from score

where left(S_no,8)=''

group by C_no

having max(grade)>80

19、查询每个学生的S_no(学号)、S_name(姓名)、S_class(班级)及其所选修课程的成绩情况。

select student.S_no,S_name,S_class,grade

from student,score

where student.S_no=score.S_no and C_no is not null

20.查询比“王玉梅”年龄大或同龄的学生的学号、姓名和出生年份,结果按出生年月升序排列。

select S_no,S_name,S_brith

from student

where (year(getdate())-year(S_brith))>=

(select (year(getdate())-year(S_brith))

from student

where S_name='王玉梅')

order by S_brith

21、查询与“刘晶晶”在同一个班学习的学生。

select *

from student

where left(S_no,8)=''

22.查询其他班级中比“信息021 ”班任一学生年龄小的学生信息。

select *

from student

where (year(getdate())-year(S_brith))>

(select min(year(getdate())-year(S_brith)) from student where S_class='信息')

23.查询所有选修了“1003c#_w”课程的学生S_no(学号)和S_name(姓名)。

select student.S_no,S_name

from student,score

where student.S_no=score.S_no and C_no='1003c#_w'

24、查询选修了课程名为“数据库原理与应用”的学生学号和姓名。

select student.S_no,S_name

from student,score,course

where student.S_no=score.S_no and score.C_no=course.C_no and C_name='数据库原理与应用'

25、建立关于student表的s_no列的聚集索引。

create unique clustered index stu_index on student(S_no)

26.建立关于course表的c_no列的惟一非聚集索引。

create unique

index cou_index on course(C_no)

27.建立关于score表的s_no列和c_no列的复合非聚集索引。

create nonclustered

index sco_index on score(C_no)

28.创建一个关于学生成绩的视图,要求含有学号,姓名,课程号,课程名和成绩列。

create view view1

as

select score.S_no,S_name,C_no,grade

from student,score

where student.S_no=score.S_no

29.创建关于学生信息的视图stu_info_view,使之仅包含学生的学号、姓名和性别等基本信息。

create view stu_info_view

as

select *

from student

30.从视图grade_view中查询达到80分以上的成绩。

create view grade_view

as

select grade

from score

where grade>=80

31.通过视图stu_info_view向表student中插入一条记录。

INSERT INTO stu_info_view values('','王红','女','1987-3-2','湖南长沙','电商','')

32、更新s_no为“”的学生的姓名为“王勇”,成绩增加2分。

update score

set grade=grade+2

from student,score

where student.S_no=score.S_no and S_name='王勇' and student.S_no=''

33、创建一存储过程,检索信息021班学生的记录。

create procedure proc1

as

select *

from student

where S_class='信息'

34、创建一存储过程GetCredit,通过用户输入课程号,输出学分。

创建:

create procedure GetCredit @课程号char(11),@学分char(2) output as

set @学分= (select C_credit from course where C_no=@课程号)

print @学分

查询:

declare @课程号char(11),@学分char(2)

set @课程号='1003c#_w'

exec GetCredit @课程号,@学分

35、 创建关于性别的默认,默认值为‘男’,并将其绑定到数据表student的s_sex列上。

创建默认值:create default sex_def as'男'

绑定默认值:exec sp_bindefault 'sex_def','student.S_sex'

36、 为数据表score的grade列设置CHECK约束,使grade列的值在0~100之间。

alter table score

add constraint che check(grade>=0 and grade<=100)

37、 为数据表score时,为s_no和c_no设置PRIMARY KEY约束和FOREIGN KEY约束。

ALTER TABLE score

ADD CONSTRAINT PK_SCORE_SNO PRIMARY KEY(S_no)

ALTER TABLE score

ADD CONSTRAINT PK_SCORE_CNO FOREIGN KEY(C_no)

38、为数据表score创建一个UPDATE触发器。当试图修改数据表score中的记录时,检查修改后记录中的s_no(学号)是否在数据表information存在,同时c_no(课程号)是否在数据表course中存在,若不是同时存在,则撤消UPDATE操作,并返回一条错误消息。

create trigger tri on score

after update

as

declare @学号 char(11),@s_no char(11),@课程号 varchar(12),@c_no varchar(12)

select @学号=S_no from inserted

select @s_no=S_no from student

select @课程号=C_no from inserted

select @c_no=C_no from course

begin

if not exists(

select * from inserted where S_no in(select S_no from student)

)

begin

raiserror('学号不存在!',16,1)

rollback

end

if not exists(

select * from inserted where C_no in(select C_no from course)

)

begin raiserror('课程号不存在!',16,1)

rollback

end

end

39、利用游标逐行显示对表course的查询结果,并按课程号排序,显示课程号和课程名称。

DECLARE cur CURSOR FOR

SELECT C_no,C_name FROM course order by C_no

OPEN cur

FETCH next FROM cur

WHILE @@FETCH_STATUS=0

BEGIN

FETCH next FROM cur

END

DEALLOCATE cur

实训心得:

为期5天的实训很快就过去了,让我重新了解了丰富多彩的编程生活,感受到了学习的快乐,也感觉到了许许多多的专业问题。

在实训期间,我学到了许多东西,遇到了一些困难,也就看到了自己本身存在许多问题。

这次实训给我带来了危机感和压迫力,同时也让我更加清楚自己的水平,心里总有种被大石头压着的无力感,但又凭着一股坚持,奋力的抗争着。所以也得出一个结论:我得好好努力啊。

真的很感谢学校能够给我们这样的实训机会,让我明白了只有多做才能熟能生巧,游刃有余,同时我也认识到要做一个合格的设计工作者并非想象的那么容易,总重要的还是细致严谨。社会不会要一个一无是处的人,所以我们应该尽快明确自己的方向和目标并为之努力奋斗。

分数:

教师签名: 年 月 日