三、操作题
1.请利用本章使用的3个基本表:Student(Sno,Sname,Ssex,Sbirthday,Sdept)、Course(Cno,Cname,Cpno,Ccredit)和SC(Sno,Cno,Grade)
完成下述操作要求:
①使用CREATE DATABASE语句创建Teach数据库,该数据库包含一个事务日志文件和以下文件组:
包含文件Teach_dat1和Teach_dat2的主文件组;
名为TeachGroup的文件组,其中包含文件Teach_G1_dat和Teach_G2_dat。各文件请自行设置。
②使用CREATE TABLE语句创建本章使用的3个表:Student、Course、SC,创建时需定义基本的完整性约束条件。
③使用INSERT语句分别向Student表、Course表和SC表插入部分记录。
④查询“计算机”学院的所有女生信息。
⑤查询姓名中第2个字为“敏”字的学生的学号和姓名。
⑥查询与“刘敏”在同一个学院的学生的姓名。
⑦查询考试成绩不及格的学生的姓名和课程名。
⑧查询“刘敏”同学没有选修的课程名。
⑨查询选修了“数据库”课程的学生的学号和成绩,并按成绩的降序排序。
⑩查询年龄大于男学生平均年龄的女学生的姓名和年龄。
⑪查询同时选修了“数据库”和“数据结构”课程的学生姓名。
⑫查询选修了“数据库”或“数据结构”课程的学生姓名。
⑬查询选修了“数据库”但没选修“数据结构”课程的学生姓名。
⑭统计每个学生选修课程的数量,要求选修课程数有3门及以上的才输出。
⑮查询每门课程每个学院的选课人数。
⑯查询每个学生超过其所选课程平均分的信息,要求列出:学号、课程号、成绩。
⑰在Student表的Sdept属性列上创建一个非聚集索引,按照Sdept降序排列。
⑱将选修“数据库”课程的学生成绩提高5%。
⑲删除SC表中“刘敏”的选课记录。
⑳创建一个视图,其包括每个学生的学号、姓名、所选课程的名称及成绩。要求,没有选修课程的学生也要列出来。
㉑创建一个标量函数,实现:查询某个学生的不及格课程数量,学生姓名作为参数传递。
㉒创建一个内联表值函数,实现:查询某个学生的选课信息。课程名称、成绩,学生姓名作为参数传递。
㉓创建一个存储过程,实现:查询某个学生的选课信息。包括:选修课程的最高分、最低分及平均分,学生姓名作为输入参数,查询到的所选修课程的最高分、最低分及平均分作为输出参数传出。
㉔创建一个AFTER触发器,实现:向Student表插入数据时,确保插入记录的Ssex属性取值为“男”或“女”。
㉕创建一个INSTEAD OF触发器,实现:向Student表插入数据时,确保插入记录的Ssex属性取值为“男”或“女”。
2.创建一个名为“图书管理”的数据库,具体要求如下:
(1)创建数据库
使用CREATE DATABASE语句创建一个数据库,命名为“图书管理”,初始容量为5M,最大容量为50M,文件每次增容的容量为1M,存放路径为“D:\图书管理”,其他属性选系统默认值。
(2)创建数据表
使用CREATE TABLE语句创建“图书管理”数据库的3个表:book(图书信息)、reader(读者信息)、borrow(借阅信息)。3个表的表结构见表3-27—表3-29。
book表:bno为主键;
reader表:rno设为主键,gender只能取值“男”或“女”,phone取值唯一;
borrow表:bno和rno一起作为联合主键,bno为外键,其对应的参照表、列是book表及其bno列,rno为外键,其对应的参照表、列为reader表及其rno列;
给book表增加一列,用于记录图书的定价:列名price,类型money,长度8,值大于0,允许空;
修改reader表中depart列的宽度为50;
创建默认值20,将其绑定到book表的price列上;
建立规则R_category,条件是取值只能是“计算机、数学、管理、经济、英语”这5种图书类别,将其绑定到book表的category列上;
删除R_category规则。
表3-27 book表结构
表3-28 reader表结构
表3-29 borrow表结构
(3)数据的增删改
使用INSERT语句为以上3个表添加记录,数据内容见表3-30—表3-32;
使用UPDATE语句将所有“机械工业出版社”出版的书的定价加10元;
使用DELETE语句删除borrow表中图书号为“0009”的借阅信息。
表3-30 book表数据
表3-31 reader表数据
表3-32 borrow表数据
(4)创建索引
使用CREATE INDEX语句在book表的publisher列上创建非聚集且不唯一索引;
使用CREATE INDEX语句在book表的name列上创建非聚集索引;
使用系统存储过程sp_helpindex查看book表的索引信息;
使用DROP INDEX语句删除book表的name列上建立的索引。
(5)数据查询
查询所有读者的信息;
查询读者的借书证号、姓名、所在院系;
按照图书价格从高到低查询所有图书的书名和价格,价格相同的按照书名升序排列;
查询图书的定价最高的3本图书信息;
查询图书类别,并消除重复记录;
查询图书名称和书号,输出结果以“书名”和“ISBN”为列标题;
查询所有图书名称和打八折后的价格,并以“8折后”命名列标题;
查询计算机类的图书信息;
查询图书的定价在20~30的计算机类图书名称和定价;
查询姓“李”的读者信息;
查询“计算机”类的图书信息;
查询“张琦”借阅的图书名、图书类别和借阅日期;
查询借阅“数据库原理”的读者姓名和借阅日期;
查询每个读者的借书数量,并找出借书数量大于5本的读者姓名和电话;
查询最受欢迎的前3本图书名称及出版社(借阅量最大)。
(6)创建视图
创建一个有关图书-读者的视图,包含读者姓名、电话、图书名,按照借阅日期降序排列。
(7)创建存储过程
创建一个存储过程,实现:查询某个读者的借阅信息。包括:图书名、借阅日期,读者姓名作为输入参数,查询到的图书名、借阅日期作为输出参数传出。
(8)触发器
创建一个AFTER触发器,实现:向reader表插入数据时,确保插入记录的gender属性取值为“男”或“女”;
创建一个INSTEAD OF触发器,实现:向reader表插入数据时,确保插入记录的gender属性取值为“男”或“女”。