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天的实训很快就过去了,让我重新了解了丰富多彩的编程生活,感受到了学习的快乐,也感觉到了许许多多的专业问题。
在实训期间,我学到了许多东西,遇到了一些困难,也就看到了自己本身存在许多问题。
这次实训给我带来了危机感和压迫力,同时也让我更加清楚自己的水平,心里总有种被大石头压着的无力感,但又凭着一股坚持,奋力的抗争着。所以也得出一个结论:我得好好努力啊。
真的很感谢学校能够给我们这样的实训机会,让我明白了只有多做才能熟能生巧,游刃有余,同时我也认识到要做一个合格的设计工作者并非想象的那么容易,总重要的还是细致严谨。社会不会要一个一无是处的人,所以我们应该尽快明确自己的方向和目标并为之努力奋斗。
分数:
教师签名: 年 月 日
发布评论