三、操作题

三、操作题

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属性取值为“男”或“女”。