SQL数据库课程设计实训报告.doc
SQL数据库课程设计实训报告( 2011 2012 )学年第 2 学期)姓 名: 学 号: 专 业: 班 级: 指导教师: SQL数据库实训报告日 期2012.6.18-2012.6.22地 点科技楼205项目名称SQL数据库课程设计实训目的能力目标能够熟练掌握并灵活运用SQLServer2005软件,初步具备开发有一定使用价值数据库应用系统能力。实训要求: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 studentVALUES('','刘晶晶','女','1985-4-14','湖南株洲','信息')INSERT studentVALUES('','周天','男','1984-4-20','广东广州','信息')INSERT studentVALUES('','张以能','女','1985-10-2','湖南长沙','信息')INSERT studentVALUES('','曾建桥','男','1984-1-22','湖南株洲','信息')INSERT studentVALUES('','王玉梅','女','1986-5-18','湖南株洲','电商')INSERT studentVALUES('','李婷','女','1986-6-10','湖北武汉','软件')INSERT studentVALUES('','谭桂香','女','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 courseVALUES('1203dzswzjs','电子商务网站建设','4','专业课')INSERT courseVALUES('1002sjkyl','数据库原理与应用','4','专业基础课')INSERT courseVALUES('1003xmkf','项目开发','2','专业课')INSERT courseVALUES('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 scoreVALUES('','','1203dzswwzjs','98')INSERT scoreVALUES('','','1002sjkyl','96')INSERT scoreVALUES('','','1003xmkf','87')INSERT scoreVALUES('','','1003c#_w','92')INSERT scoreVALUES('','','1003c#_w','76')INSERT scoreVALUES('','','1003c#_w','83')INSERT scoreVALUES('','','1003c#_w','87')5在student 表中添加一个长为 20 个字符,名为S_major的类型为CHAR的列:alter table student add s_major char(20)6、修改学生“周天”的家由“广东广州”搬到“湖南株洲”。 update studentset S_address='湖南株洲'where S_name='周天'7将班级为“”课程号为“1003c#_w”,的成绩统一设置为75。update scoreset grade=75 where left(S_no,8)='' and C_no='1003c#_w'8查询全体学生的姓名、学号、所在班级。select S_no,S_name,S_class from student9查询全体学生的姓名及其年龄。select S_name,year(getdate()-(year(S_brith) 年龄from student10查询全体学生的学号、姓名和年龄,同时以汉字标题来表示学号、姓名和年龄。select S_no 学号,S_name 姓名,year(getdate()-(year(S_brith) 年龄from student11、查询学号为考试成绩80分以上的学生学号、课程号、学期和成绩并显示汉字标题。select S_no 学号,C_no 课程号,semester 学期,grade 成绩from scorewhere S_no='' and grade>8012查询年龄在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 scorewhere grade=null15查询所有选修过课程的学生的学号。select S_no from score where C_no is not null16查询课程号为“1003c#_w”的成绩为前三名的学生的学号和成绩。select top 3 S_no,gradefrom score where C_no='1003c#_w' order by grade desc17查询选修了“1003c#_w”课程的学生的学号及其成绩,查询结果按分数的降序排列。select S_no,gradefrom score where C_no='1003c#_w' order by grade desc18查询 班各门课程最高成绩,并显示最高成绩大于80的课程号和最高成绩。 select C_no,max(grade)from scorewhere left(S_no,8)='' group by C_nohaving 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 studentwhere S_name='王玉梅') order by S_brith21、查询与“刘晶晶”在同一个班学习的学生。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_no29创建关于学生信息的视图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列的值在0100之间。alter table score add constraint che check(grade>=0 and grade<=100) 37、 为数据表score时,为s_no和c_no设置PRIMARY KEY约束和FOREIGN KEY约束。ALTER TABLE scoreADD CONSTRAINT PK_SCORE_SNO PRIMARY KEY(S_no)ALTER TABLE scoreADD 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天的实训很快就过去了,让我重新了解了丰富多彩的编程生活,感受到了学习的快乐,也感觉到了许许多多的专业问题。在实训期间,我学到了许多东西,遇到了一些困难,也就看到了自己本身存在许多问题。这次实训给我带来了危机感和压迫力,同时也让我更加清楚自己的水平,心里总有种被大石头压着的无力感,但又凭着一股坚持,奋力的抗争着。所以也得出一个结论:我得好好努力啊。真的很感谢学校能够给我们这样的实训机会,让我明白了只有多做才能熟能生巧,游刃有余,同时我也认识到要做一个合格的设计工作者并非想象的那么容易,总重要的还是细致严谨。社会不会要一个一无是处的人,所以我们应该尽快明确自己的方向和目标并为之努力奋斗。分数: 教师签名: 年 月 日