数据库课本例题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章创建与管理数据库
1. 创建数据库student,并指定数据库的数据文件所在位置、初始容量、最大容量和文件增长量。
2. 创建数据库teaching,并指定数据库的数据文件和日志文件的所在位置、初始容量、最大容量和文件增长量。
3.为student数据库增加一个日志文件。
4.修改student数据库的排序规则。
5. 给student数据库添加文件组studentfgrp,再添加数据文件studentfile.ndf到文件组studentfgrp中。
6.将名为student数据库改名为STUDENTDB。
7. 删除已创建的数据库student。
8. 文件和文件组示例。
在SQL Server 2005实例上创建了一个数据库,该数据库包括一个主数据文件、一个用户定义文件组和一个日志文件。
主数据文件在主文件组中,而用户定义文件组包含两个次要数据文件。
ALTER DATABASE 语句将用户定义文件组指定为默认文件组。
9. 为test01创建数据库快照。
代码:
例1.
例2.
例3.
例4.
例5.
例6.
例8.
例9.
结果:例1.
例3.
例4.
例5.
例6.
例7.
例8.
例9.
第三章表和数据完整性
1. 利用CREATE TABLE命令建立课程信息表course,表结构如表所示。
2. 利用CREATE TABLE命令建立学生分数表score,表结构如表所示。
该表中主键由两个列构成。
3.利用CREATE TABLE命令建立教师信息表teacher,表结构如表所示。
4.利用CREATE TABLE命令建立班级信息表结构如表所示。
5.为了完善teaching数据库的表间联系,创建表结构如所示的纽带表teach_class。
然后查看该表的有关CREATE TABLE命令脚本信息。
6.在test01数据库中创建一个新表student1,然后修改其列属性。
7. 修改test01中表student1的列column_class数据类型和名称。
8. 向teaching数据库中的score表中添加数据。
9. 更改teaching数据库中的score表中的学号为0824113307、课程号为c05127的期末成绩修改为87。
10.为数据库test01中表student1输入3行数据,然后将列st_class的值全部改为jsj1012。
11.删除数据库test01中表student1的列st_class的值为jsj1012的行。
12.在数据库test01中创建表stud,为表添加、删除列和行,再删除该表。
13. 局部临时表的创建与数据输入。
14. 为数据库teaching中的班级表class的列classno创建FOREIGN KEY 约束,并将其中的classname、department、monitor的“允许空”修改为NOT NULL。
15. 为数据库teaching中的成绩表score的两个列usually和final添加CHECK约束,限定其值在0~100范围内。
16.为数据库teaching中的学生信息表student的列Email创建一个UNIQUE约束。
17. 为数据库teaching中表score的列studentno创建一个FOREIGN KEY约束。
18. 利用命令删除为数据库teaching中表score的一个约束FK_score_student1。
19. 为数据库teaching创建一条规则score_rule,该规则规定凡是分数类的列值必须在0~100之间。
代码:
例1.
例2.
例3.
例4.
例5.
例6.
例7.
例8.
例9.
例10.
例11.
例12.
例13.
例14.
例15.
例16.
例17.
例18.
例19.
实验结果:例1.
例2.
例3.
例4.
例5.
例6.
例7.
例8.
例9.
例10.
例11.
例12.
例13.
例14.
例15.
例16.
例17.
例18.
例19.
第四章Transact-SQL语言基础
1.声明一个@myvar 变量,然后将一个字符串值放在变量中,再输出@myvar 变量的值。
2. 显示到当前日期和时间为止试图登录SQL Server 2005的次数。
3.为前面的例子添加注释。
4.通配符与逻辑运算符LIKE举例。
在数据库teaching中可以用检查约束来验证表student的列Email的值。
5.逻辑运算符IN的使用方法。
6.逻辑运算符BETWEEN的使用方法。
7. 输出下列函数的值CEILING(),FLOOR(),ROUND()。
8. 从GETDATE函数返回的日期中提取年份、月份和天数值并输出。
9. 日期和时间函数的使用示例。
10.使用LTRIM 函数删除字符变量中的起始空格。
11.在Transact-SQL中使用IF语句。
12.用BEGIN …END 语句可使IF 语句在计算结果为FALSE时跳过语句块。
13. 循环控制语句WHILE的使用方法。
14. 简单CASE语句举例。
15. 搜索CASE语句举例。
16.利用GOTO语句求出从1加到7的总和。
17. 使用WAITFOR TIME语句,以便在晚上10:20:17执行存储过程sp_help。
18. 在一个过程中使用TRY...CATCH语句,先让SELECT语句产生除数为0的错误,该错误将使得CATCH块的执行。
代码:
例1.
例2.
例3.
例4.
例5.
例6.
例7.
例8.
例9.
例10.
例11.
例12.
例13.
例14.
例15.
例16.
例17.
例18.
结果:例1.
例2.
例3.
例4.
例5.
例6.
例7.
例8.
例9.
例10.
例11.
例12.
例13.
例14.
例15.
例16.
例17.
例18.
第五章数据检索
1.查询表student中女生的相关信息。
2. 列出所有course的职员课程号、课程名和学分。
3.查询表student中入学成绩在780分以上的学生的学号、姓名和电话信息。
4.查询表student中入学成绩在780分以上的学生的学号、姓名、电话和班级名称信息。
在FROM子句中使用AS关键字为表指派一个临时名称。
5.在score表中显示期中、期末成绩都高于85分的学生学号、课程号和成绩。
6.查询选修课称号为c05109或c06108且期末成绩大于等于85分学生的学号、课程号和成绩。
7. 查询计算机学院的具有高级职称教师的教师号、姓名和从事专业。
8. 利用SELECT…INTO创建新表。
在teaching数据库中创建一个新表学生成绩st_score,包括学生学号、姓名、课程号和期末成绩。
9. 查询数据库test01中“奖学金”表中获得奖学金的学生的学号、班级号、综合测评和班级名次情况。
10.在student表中1989年以后出生的学生的学号、姓名、入学成绩和Email。
11.在student表中显示所有姓何或姓韩的学生的姓名、生日和Email。
12.在student表中显示手机号开始3位不是131的学生姓名、电话和Email。
13. 在student表中显示所有1989年或1月份出生的学生的姓名、生日和Email。
14. 查询选修课程号为c05109 的学生学号和期末成绩,并且要求平时成绩在88到95之间。
15. 查询选修课程号为c05103 的学生学号和总评成绩,并且要求期末成绩不在78到90之间。
其中,总评成绩的计算公式为:
总评成绩= Final *0.7+ usually*0.3。
16.查询学号分别为的0824113307、0925111109和0935222201的学生学号、课程号、平时成绩和期末成绩。
17. 在student表中查询出生日期在1989年以后的学生的学号、姓名、电话和年龄。
18. 在student表中查询学生的学号、姓名和入学成绩,并按照入学成绩的降序排列。
19. 在student表中查询学号大于0923000000的学生的学号、姓名、电话和Email,并按照姓名的升序排序。
20. 在score表中查询总评成绩大于85的学生的课程号、和总评成绩学号,并先按照课程号的升序、再按照总评成绩的降序排列。
21. 在st_score表中查询期末成绩中有高于85的学生的学号和姓名,并按照姓名排序。
22.从student表中查询入学成绩前5名的学生的学号、姓名、分数和电话。
23. 利用SELECT 语句从student表中返回入学成绩排在前35%的学生的学号、姓名、分数和电话。
24. 用GROUP BY子句对score表数据分组,显示每个学生的学号和平均总评成绩。
总评成绩计算公式如下:
总评成绩=usually*0.3+final*0.7。
25. 统计student表中的男女学生的人数。
26.利用GROUP BY子句对score表数据分组,显示总评成绩高于分的每个学生的学号和平均总评成绩。
27. 查询选课在3门以上且各门课程期末成绩均高于75分的学生的学号及其总成绩,查询结果按总成绩降序列出。
28.查看student表中入学成绩在788分以上的学生的学号、出生日期和电话,且年龄最小的学生的生日。
29. 分别查询student表中入学成绩在750分以上的男女学生的学号、性别、出生日期和电话,及年龄最小的男女学生的生日。
30. 查询选修课程号为c05109号课程的期末最高分、最低分及之间相差的分数。
31. 通过查询求09级学生的总数。
32. 查询选课少于3门的学生的学号及其选课的门数。
33. 查询score表中各门课程的课程号及期末平均成绩。
34. 查询score表中学生的期末总成绩大于280分的学生学号及总成绩。
代码:
例1.
例2.
例3.
例4.
例5.
例6.
例7.
例8.
例9.
例10.
例11.
例12.
例13.
例14.
例15.
例16.
例17.
例18.
例19.
例20.
例21.
例22.
例23.
例24.
例25.
例26.
例27.
例28.
例29.
例30.
例31.
例32.
例33.
例34.
结果:例1.
例2.
例3.
例4.
例5.
例6.
例7.
例8.
例9.
例10.
例11.
例12.
例13.
例14.
例15.
例16.
例17.
例18.
例19.
例20.
例21.
例22.
例23.
例24.
例25.
例26.
例27.
例28.
例29.
例30.
例31.
例32.
例33.
例34.
第六章Transact-SQL语句的高级应用
1. 查询选修课程号为c05109的学生的学号、姓名和期末成绩。
2. 查询选修课程号为c05103且平时成绩高于80分的学生的学号、姓名、平时成绩和期末成绩。
3. 利用左外连接方式查询08级学生的学号、姓名、平时成绩和期末成绩。
4. 利用右外连接方式查询教师的排课情况。
5.利用完全外连接方式查询教师的排课情况。
6.显示student 表和score表的笛卡儿积。
7. 查询08级学生的学号、姓名、课程名、期末成绩及学分。
8. 查询计算机学院的老师的教师号、姓名、上课班级号、课程名和学分。
9. 合并结果集示例。
10.查询学号为0828261367的学生的入学成绩、所有学生的平均入学成绩及该学生成绩与所有学生的平均入学成绩的差。
11.获取期末成绩中含有高于93分的学生的学号、姓名、电话和Email。
获取期末成绩中含有高于93分的学生的学号、姓名、电话和Email。
12.查询选修课程的多于2门、且期末成绩均在85分以上的学生的学号、姓名、电话和Email。
13. 查询期末成绩比该选修课程平均期末成绩低的学生的学号、课程号和期末成绩。
14. 查询期末成绩高于85分、总评成绩高于90分的学生的学号、课程号和总评
15. 创建一个表sc,将score表中学生的相关数据添加到sc表中,并要求计算总评成绩。
16.将sc表中含有总分低于80课程的所有学生总分增加5%。
17. 查询student表中是否存在1990年12月12日以后出生的学生,如果存在,输出学生的学号、姓名、生日和电话。
18. 使用STATIC关键字声明全局游标cEmploy。
19. 使用FETCH访问游标中的记录。
20. 使用游标输出teacher表。
21. 使用嵌套游标生成报表输出08级每个学生的学号、各科总评成绩和电话。
22.声明游标,利用函数查看游标对teacher表进行检索的状态。
23. 利用sp_cursor_list系统存储过程显示游标的属性。
24. 利用BULK INSERT命令向teaching 数据库中的st_score数据表添加数据。
该表的结构如图所示。
25.在teaching数据库中创建expic表,然后向该表添加新的记录。
26.使用OPENROWSET命令的方法添加大容量数据。
代码:
例1.
例2.
例3.
例5.
例6.
例7.
例8.
例9.
例10.
例11.
例12.
例13.
例14.
例15.
例16.
例17.
例18.
例19.
例20.
例21.
例22.
例23.
例24.
例25.
例26.
结果:例1.
例2.
例3.
例4.
例5.
例6.
例7.
例8.
例9.
例10.
例11.
例12.
例13.
例14.
例15.
例16.
例17.
例18.
例19.
例20.
例21.
例22.
例23.
例24.
例25.
例26.
第七章索引和视图
1. 给出一个程序,在teaching数据库中的student表的studentname列上创建唯一索引IDX_sname。
2. 给出一个程序,在teaching数据库中的student表的studentno和classno列上创建组合索引IDX_sc。
3. 重新组织teaching数据库中student表上的IDX_sc索引。
4. 重新生成teaching数据库中student表上的IDX_sname索引,设置填充索引,将填充因子设置为80%,设置将中间排序结果存储在tempdb中。
5.重新生成teaching数据库中test_index表上的C_studentno索引,将其修改为聚集唯一索引,并指定该索引的叶级页的填充度为70%。
6.删除teaching数据库中student表上的聚集索引C_studentno和非聚集索引UC_classno。
7. 给出一个程序,在student表的studentno和classno上创建一个统计组studentclass,要求对所有记录计算统计信息。
8. 通过DBCC SHOW STATISTICS命令显示student表IDX_sc索引的统计信息。
9. 给出一个程序,更新student表IDX_sc索引的统计信息。
10. 给出一个程序,更新student表上所有索引的分布统计信息。
11.给出一个程序,在teaching数据库中创建一个名称为v_course的视图,包含所有类别为“必修”的课程信息。
12.给出一个程序,在teaching数据库中创建一个名称为v_final的视图,包含学生学号、姓名、课程号、课程名和期末成绩,按学号升序排序,相同学号的记录按课程号升序排序。
13. 给出一个程序,在teaching数据中创建一个名称为v_max的视图,查询每个班最高分的课程名和分数,按班级号升序排序。
14. 通过v_final和v_course视图查询所有学生的学号、姓名和已修必修课的总学分。
15.给出一个程序,在teaching数据库中创建一个名称为v_course的视图,包含所有类别为“必修”的课程信息。
16.使用ALTER VIEW语句修改v_final视图,使其包含所有学生姓名、课程名和期末成绩,按姓名升序排序。
17. 使用ALTER VIEW语句修改v_avg视图,将其改为加密方式,以确保视图的安全性。
18. 通过视图v_course向基本表course中插入数据('c05129', '数据库编程', '必修', 64, 4)。
19. 给出一个程序,在teaching数据中创建一个名称为v_sex的视图,包含所有性别为“女”的学生的学号、姓名、性别、出生日期和班级编号,需限制插入数据中性别必须为“女”。
20. 通过视图v_final向基本表中插入数据('何影', '数据库编程', 90)。
21. 通过视图v_course将基本表course课程号为'c05129'的课程名称修改为'数据库应用与开发'。
22.通过视图v_final将基本表score中学号为'0925121107'的'梁欣'选修的课程号为'c05129'的'C语言'课程的期末成绩修改为60分。
23. 通过视图v_final将基本表student和score中学号为'0925121107',选修的课程号为'c05129'的学生姓名修改为'李静',期末成绩修改为60分。
24. 通过视图v_sex删除基本表student中学号为' 0938211038'的学生记录。
25.通过视图v_course删除基本表course中课程号为'c05109'的课程记录。
代码:
例1.
例2.
例3.
例4.
例5.
例6.
例7.
例8.
例9.
例10.
例11.
例12.
例13.
例14.
例15.
例16.
例17.
例18.
例19.
例20.
例21.
例22.
例23.
例24.
例25.
结果:例1.
例2.
例3.
例4.
例5.
例6.
例7.
例8.
例9.
例10.
例11.
例12.
例13.
例14.
例15.
例16.
例17.
例18.
例19.。