Sql - server2005实训
更新时间:2023-03-16 17:24:01 阅读量: 教育文库 文档下载
- sql server推荐度:
- 相关推荐
数据库应用基础A实训
一、实训目的
1、进一步明确数据库管理的主要功能。
2、进一步掌握SQL Server 2005数据库及其组成。 3、进一步熟悉主要数据库对象的操作。
4、提高应用SQL Server 2005数据库的能力。 5、提高T-SQL语句的编写能力。
二、实训内容
(一)关系运算练习
对于学生选课关系,其关系模式如下: 学生(学号,姓名,年龄,所在系) 课程(课程名,课程号,先行课) 选课(学号,课程号,成绩) 试用关系代数完成下列查询: ① 求成绩不及格的学生学号和姓名
Π学号,姓名(δ成绩<60(学生∞选课))
② 求学过数据库课程的学生学号和姓名
Π学号,姓名(δ课程名=‘数据库’(学生∞选课∞课程))
③ 求数据库成绩不及格的学生学号和姓名
Π学号,姓名(δ课程名=‘数据库’∧成绩<60(学生∞选课∞课程))
④ 求学过数据库和数据结构课程的学生学号和姓名
Π学号,姓名(δ课程名=‘数据库’(学生∞选课∞课程))∩Π学号,姓名(δ课程名=‘数据结构’(学生∞选课∞课程))
⑤ 求学过数据库或数据结构课程的学生学号和姓名
Π学号,姓名(δ课程名=‘数据库’(学生∞选课∞课程))∪Π学号,姓名(δ课程名=‘数据结构’(学生∞选课∞课程)) ⑥ 求没学过数据库课程的学生学号
Π学号(学生)-Π学号(δ课程名=‘数据库’(选课∞课程))
(二)E-R图设计
1、
有以下学校选课管理的信息系统开发需求:(1)学生查看成绩、查看课程和开课教师信息。(2)学生选课。(3)教师查看所开课的选课学生基本信息。给出E-R图,然后给出关系模式。
1
专业号专业名称学号姓名性别1专业属于学生nn考试成绩修学课程号包含系编号1课程名称系课程系名称nn学分构成学院编号1属于教授上课时间n学院名称学院教师工号姓名性别
2
专业号专业名称学号姓名性别1专业属于n学生nn考试成绩修学课程号包含系编号1m课程名称系系名称n1属于课程n学分构成学院编号1教授上课时间mn教师学院名称学院工号姓名性别
2)关系模式
学生(*学号,姓名,性别,&专业号) 教师(*工号,姓名,性别,&系编号)
课程(*课程号,课程名,课程性质(公共、专业),学分) 学院(*学院编号,名称)
系(*系编号,名称,&学院编号) 专业(*编号,名称,&系编号)
学生-课程(*&学号,*&课程号,考试成绩) 教师-课程(*&工号,*&课程号,上课时间) 注:*表示主码,&表示外码
2、请设计一个连锁商店数据库,保存商店的信息,包括:商店编号,商店名称,电话。保存商品的信息,包括:商品编号,商品名称,价格。保存员工的信息,包括:工号,姓名,年龄,性别,住址。同时要保存每种商品在每家商店的销售数量。其中一个商品可以销售多种商品,一种商品也可以在不同的连锁商店销售,一名员工只能在一家商店工作。要求:给出该数据库的E-R图,再将其转换为关系模型。同时标明关系模式的候选码和外码。
3
关系模式:
商店(商店编号,商店名称,电话)候选码:商店编号 商品(商品编号,商品名称,价格)候选码:商品编号
员工(工号,姓名,年龄,性别,住址,商店编号)候选码:工号 外码:商店编号 销售(商店编号,商品编号,销售数量)候选码:(商店编号,商品编号)外码:商店编号,商品编号
(三)使用PD建立数据库概念模型
1、一对一CDM
下图描述了 一个系统用户对应一个扩展信息,也可以没有扩展信息。扩展信息依赖用户信息的存在。并且一个扩展信息只能有一个用户信息。
4
5
FROM T_Grade
WHERE StudentCode='05101101') IF @cn>=3 BEGIN
SET @text='你选了'+CAST(@cn AS char(2))
/* CAST函数将@cn的值转换为长度为2的字符数据*/
SET @text=@text+'门课。很好,你完成了任务!' END ELSE
BEGIN
SET @text='你选了'+CAST(@cn AS char(2)) SET @text=@text+'门课。选课太少,加油!' END
SELECT @text AS 选课提示 【例4-57】计算10!。执行结果见图4-54。
DECLARE @p int, @i smallint, @text varchar(100) SET @p=1
图4-54计算10!的结果
SET @i=1
WHILE @i<=10 BEGIN
SET @p= @p*@i SET @i=@i+1 END
SET @text='1×2×3×……×10='+CAST(@p AS char(10)) SELECT @text AS 计算结果
【例4-58】查询07级女同学的住校情况。执行结果见图4-55。 SELECT StudentName AS '姓名', CASE LiveInDorm
WHEN 0 THEN '未住校' WHEN 1 THEN '住校' 图4-55 07级女生住校情况 END AS '是否住校' FROM T_Student
WHERE Sex='女' AND LEFT(StudentCode,2)='07'
【例4-59】统计每个学生平均成绩并划分等级。执行结果如图4-56所示。 SELECT StudentCode AS '学号', STR(AVG(Grade),5,2) AS '平均成绩', CASE
WHEN AVG(Grade)>=90 THEN 'A' WHEN AVG(Grade)>=80 THEN 'B' WHEN AVG(Grade)>=70 THEN 'C' WHEN AVG(Grade)>=60 THEN 'D' WHEN AVG(Grade)<60 THEN 'E' END AS '等级'
图4-56 成绩等级部分结果 FROM T_Grade GROUP BY StudentCode
【例4-65】在School中创建一个存储过程proc_SearchStudent,查询指定学生的选课情
16
况。
CREATE PROC proc_SearchStudent @stcode char(8) AS
SELECT T_Student.StudentName, T_Course.CourseName FROM T_Student JOIN T_Grade JOIN T_Course
ON T_Grade.CourseCode=T_Course.CourseCode ON T_Student.StudentCode=T_Grade.StudentCode WHERE T_Student.StudentCode=@scode
调用例4-64创建的存储过程proc_Course的语句为: EXEC proc_Course
调用例4-65创建的存储过程proc_SearchStudent,查询'05101101'学生的选课情况 EXEC proc_SearchStudent '05101101' 或
EXEC proc_ SearchStudent @scode='05101101' 【例4-66】在School中创建一个的存储过程
图4-65 proc_SearchStudent执行结果
proc_SearchStudentAvgGrade,查询某个学生的选课数目和平均成绩。
本例带一个输入参数和二个输出参数的存储过程,在定义输出参数时要用OUTPUT说明。
CREATE PROC proc_SearchStudentAvgGrade
@stcode char(8), @stcount int OUTPUT, @stavg int OUTPUT AS
SELECT @stcount=COUNT(T_Grade.StudentCode), @stavg=AVG(T_Grade.Grade) FROM T_Grade
WHERE T_Grade.StudentCode=@stcode GROUP BY T_Grade.StudentCode
调用存储过程proc_SearchStudentAvgGrade,查询'05101101'学生的选课数目和平均成绩,执行结果如图4-66所示。
DECLARE @scount int, @savg int
EXEC proc_SearchStudentAvgGrade '05101101', @scount OUTPUT, @savg OUTPUT PRINT '学生' + '05101101'+的选课数目为'+CAST(@scount AS char(2))+'门' PRINT '学生'+ '05101101'+的平均成绩为'+STR(@savg,5,2)+'分'
【例4-66】在School中创建一个的存储过程proc_SearchStudentAvgGrade,查询某个学生的选课数目和平均成绩。
本例带一个输入参数和二个输出参数的存储过程,在定义输出参数时要用OUTPUT说明。
CREATE PROC proc_SearchStudentAvgGrade
@stcode char(8), @stcount int OUTPUT, @stavg int OUTPUT AS
SELECT @stcount=COUNT(T_Grade.StudentCode), @stavg=AVG(T_Grade.Grade) FROM T_Grade
WHERE T_Grade.StudentCode=@stcode
17
GROUP BY T_Grade.StudentCode
调用存储过程proc_SearchStudentAvgGrade,查询'05101101'学生的选课数目和平均成绩。
DECLARE @scount int, @savg int
EXEC proc_SearchStudentAvgGrade '05101101', @scount OUTPUT, @savg OUTPUT PRINT '学生' + '05101101'+的选课数目为'+CAST(@scount AS char(2))+'门' PRINT '学生'+ '05101101'+的平均成绩为'+STR(@savg,5,2)+'分'
【例4-69】在School数据库中创建一个简单的触发器tri_StudentInsDel,当用户插入或删除T_Student表中学生记录时,能自动显示表中的内容”。
CREATE TRIGGER tri_StudentInsDel ON [dbo].[T_Student] FOR INSERT, DELETE AS
SELECT * FROM T_Student
【例4-70】 在School数据库的T_Student表上创建一个触发器tri_StudentCodeUpdate,当对学号列进行修改时,给出提示信息并取消修改操作。
CREATE TRIGGER tri_StudentCodeUpdate ON T_Student FOR UPDATE AS
DECLARE @text varchar(50) IF UPDATE(StudentCode) BEGIN
SET @text='学生数据被修改!!!' RAISERROR(@text,16,1) ROLLBACK TRANSACTION END 【例4-71】在School数据库的T_Grade表上创建一个触发器tri_Grade,当向T_Grade表中插入一条记录时,检查该记录的学号是否在T_Student表中,如果不存在则取消插入操作,否则显示“插入操作成功完成”。
CREATE TRIGGER tri_Grade ON T_Grade FOR INSERT AS
DECLARE @text varchar(50)
IF EXISTS(SELECT * FROM inserted
WHERE inserted.StudentCode NOT IN (SELECT StudentCode FROM T_Student))
BEGIN
SET @text='学生的学号不存在,将取消该插入操作 ' RAISERROR(@text,16,1) ROLLBACK TRANSACTION END Else
SET @text='插入操作成功完成'
18
1、创建一个数据库,其具体属性如下表 参数 数据库名 逻辑数据文件名 物理数据文件名 数据文件的初始大小 数据文件的最大大小 数据文件增长帐度 日志逻辑文件名 操作系统日志文件名 日志文件初始大小 日志文件增长幅度 参数值 student student_dat D:\\student_dat.mdf 3MB 10MB 15% student_log D:\\student_log.ldf 1MB 10% 2、使用T-SQL语句,在数据库student中创建如下student表,表结构如下:(注:要求表字段取英文名) 列名(英文名) S_no S_name S_sex 列文(中文名) 学号 姓名 性别 数据类型 char char char 长度 11 8 2 允许空值 ? ? ? 主键 默认值:男;约束:只能填“男”或“女” S_birth S_address S_class 出生日期 datetime 家庭地址 varchar 班级 varchar 30 10 ? ? ? 默认值:系统日期 说明 其表记录如下:
3、使用T-SQL语句,在数据库student中创建如下course表,表结构如下:(注:要求表字段取英文名)(10分)
19
其表记录如下:
4、使用T-SQL语句,在数据库student中创建如下score表,表结构如下:(注:要求表字段取英文名)(10分)
其表记录如下:
5. 要在student 表中添加一个长为 20 个字符,名为S_major的类型为CHAR的列: 6、修改学生“周天”的家由“广东广州”搬到“湖南株洲”。 7. 将班级为“20021001”课程号为“1003c#_w”,的成绩统一设置为75。 8. 查询全体学生的姓名、学号、所在班级。 9. 查询全体学生的姓名及其年龄。
10.查询全体学生的学号、姓名和年龄,同时以汉字标题来表示学号、姓名和年龄。
11、查询学号为’20021003010’考试成绩80分以上的学生学号、课程号、学期和成绩并显示汉字标题。
12.查询年龄在18至22岁之间的学生的S_name(姓名)、S_class(班级)、和Nl(年龄不是基本表中的字段,是计算出来的字段)。
13.查询家庭地址为“湖南株洲”和“湖南长沙”班学生的详细信息。 14.查询缺少成绩的学生的学号和相应的课程号。 15.查询所有选修过课程的学生的学号。
16.查询课程号为“1003c#_w”的成绩为前三名的学生的学号和成绩。
17.查询选修了“1003c#_w”课程的学生的学号及其成绩,查询结果按分数的降序排列。 18.查询’ 20021003’班各门课程最高成绩,并显示最高成绩大于80的课程号和最高成绩。 19、查询每个学生的S_no(学号)、S_name(姓名)、S_class(班级)及其所选修课程的成绩情况。
20.查询比“王玉梅”年龄大或同龄的学生的学号、姓名和出生年份,结果按出生年月升序排列。
21、查询与“刘晶晶”在同一个班学习的学生。
22.查询其他班级中比“信息021 ”班任一学生年龄小的学生信息。
23.查询所有选修了“1003c#_w”课程的学生S_no(学号)和S_name(姓名)。 24、查询选修了课程名为“数据库原理与应用”的学生学号和姓名。 25、建立关于information表的s_no列的聚集索引。 26.建立关于course表的c_no列的惟一非聚集索引。
20
27.建立关于score表的s_no列和c_no列的复合非聚集索引。
28.创建一个关于学生成绩的视图,要求含有学号,姓名,课程号,课程名和成绩列。 29.创建关于学生信息的视图stu_info_view,使之仅包含学生的学号、姓名和性别等基本信息。
30.从视图grade_view中查询达到80分以上的成绩。
31.通过视图stu_info_view向表information中插入一条记录。 32、更新s_no为“20031001002”的学生的姓名为“王勇”,成绩增加2分。 33、创建一存储过程,检索信息021班学生的记录。
34、创建一存储过程GetCredit,通过用户输入课程号,输出学分。 35、创建关于性别的默认,默认值为‘男’,并将其绑定到数据表 information的s_sex列上。
36、为数据表score的grade列设置CHECK约束,使grade列的值在0~100之间。
37、为数据表score时,为s_no和c_no设置PRIMARY KEY约束和FOREIGN KEY约束。 38、为数据表score创建一个UPDATE触发器。当试图修改数据表score中的记录时,检查修改后记录中的s_no(学号)是否在数据表information存在,同时c_no(课程号)是否在数据表course中存在,若不是同时存在,则撤消UPDATE操作,并返回一条错误消息。 39、利用游标逐行显示对表course的查询结果,并按课程号排序,显示课程号和课程名称。 40、在myBackup磁盘设备上对student数据库作全库备份后,现在对student数据库出现误操作,需要从备份中恢复。
21
27.建立关于score表的s_no列和c_no列的复合非聚集索引。
28.创建一个关于学生成绩的视图,要求含有学号,姓名,课程号,课程名和成绩列。 29.创建关于学生信息的视图stu_info_view,使之仅包含学生的学号、姓名和性别等基本信息。
30.从视图grade_view中查询达到80分以上的成绩。
31.通过视图stu_info_view向表information中插入一条记录。 32、更新s_no为“20031001002”的学生的姓名为“王勇”,成绩增加2分。 33、创建一存储过程,检索信息021班学生的记录。
34、创建一存储过程GetCredit,通过用户输入课程号,输出学分。 35、创建关于性别的默认,默认值为‘男’,并将其绑定到数据表 information的s_sex列上。
36、为数据表score的grade列设置CHECK约束,使grade列的值在0~100之间。
37、为数据表score时,为s_no和c_no设置PRIMARY KEY约束和FOREIGN KEY约束。 38、为数据表score创建一个UPDATE触发器。当试图修改数据表score中的记录时,检查修改后记录中的s_no(学号)是否在数据表information存在,同时c_no(课程号)是否在数据表course中存在,若不是同时存在,则撤消UPDATE操作,并返回一条错误消息。 39、利用游标逐行显示对表course的查询结果,并按课程号排序,显示课程号和课程名称。 40、在myBackup磁盘设备上对student数据库作全库备份后,现在对student数据库出现误操作,需要从备份中恢复。
21
正在阅读:
Sql - server2005实训03-16
尔雅英美文化概论课后答案08-20
刻舟求剑改写500字06-20
开卷是否有益作文500字06-24
因为亲近所以美好作文450字07-13
协议格式02-16
2012年申论热点:农业大学农村生源减少07-06
名词解释 Microsoft Word 文档(2)11-16
中国现代文学三十年笔记整理版09-05
五层框架结构教学楼 - 施工组织设计05-04
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- server2005
- Sql
- 日界线、晨昏线、地方时的判断计算例析
- 数字成语大全(小学二年级)
- 教师用2011年高考语文试题分类汇编 - 论述类文本阅读
- 第二章练习题答案
- 公司项目命名规则
- 元素周期表中元素及其化合物的递变性规律
- 自主、合作、探究的学习方式在语文阅读教学中的尝试
- 2018年上海市金山区高三二模语文试卷(附答案)
- 水路运输企业筹建开业申请书
- 北大纵横—安徽电建培训管理制度inal
- 走向对话,构建高效课堂
- 调研山东调研报告
- 中国聚丙稀管道市场发展研究及投资前景报告(目录) - 图文
- 胃肠疾病病人的护理(1)
- 7.5.3产品标识和可追溯性控制程序
- 2015年上半年湖北省管理与法规:耕地保护和土地用途管制内容试题
- 经销合作协议书 doc
- 各种 RNAi 区别
- 多项式实验报告
- 发展经济学重点总结