问答题 某学生选课数据库,库中包括学生、课程和选课3个表,其表结构为:
学生(学号,姓名,性别,年龄,所在系);
课程(课程号,课程名,先行课);
选课(学号,课程号,成绩)。
用Transact-SQL完成下列操作。
1)建立学生选课数据库。
2)建立学生、课程和选课表。
3)建立各表以主码为索引项的索引。
4)建立学生性别只能是“男”或“女”的规则,性别为“男”的缺省,并将它们绑定到学生表上。
5)建立在对选课表输入或更改数据时,必须服从参照完整性约束的INSERT和UPDATE触发器。
6)建立在删除学生记录时,同时也要把相应的选课记录删除的触发器。
7)列出学生学号、姓名及学习情况。学习情况用好、较好、一般或较差表示。当平均成绩大于85分时,学习情况为好;当平均成绩在70~85分之间,学习情况为较好;当平均成绩在60~70分之问,学习情况为一般;当平均成绩在60分以下,学习情况为较差。

【正确答案】1)CREATE DATABASE 学生选课库ON PRIMARY (NAME=学生选课库,FILENAME=‘C:/msSQL/data/学生选课.mdf’SIZE =4MB,MAX-SIZE=6MB,FILEROWHT=2MB) CO
2)CREATE TABLE 学生(学号CHAR(10)PRI-MARY KEY CLUSTERED,姓名 CHAR(8),性别CHAR(2),年龄 SMALLINT,所在系 VARCHAR(50))GO CREATE TABLE 课程(课程号CHAR(10)PRIMARY KEY CLUSTERED 课程名VARCHAR(50),先行课 VARCHAR(50))GO CRE-ATE TABLE 选课(学号 CHAR(10),课程号VARCHAR(50),成绩 SMALLINT,CONSTRAINT C1
PRIMARY KEY(学号课程,课程号),CONSTRAINT C2 PRIMARY KEY(学号)REFERENCES 学生(学号),CONSTRAINT FOREIGN KEY(课程号)REFERENCES课程(课程号))GO
3)CREATE INDEX student_ind ON 学生(学号)GO CREATE INDEX class_ind ON 课程(课程号)GO CREATE INDEX select_ind ON选课(学号,课程号)C0
4)CREATE RULE value_rule AS @ VALUF IN(‘男’,‘女’)CO CREATE DEFAULT性别缺省AS‘男’ GO FJXEC sp_bindrule‘value_rude’,‘学生.性别’ GO EXEC sp_binddefault ‘性别缺省’,‘学生.性别’ GO
5)CREATE rFRIGCER sc_insert ON 选课 FOR INSERT AS IF(SELECT COUNT(*)FROM学生,insened,课程 WHERE 学生,学号=inserted.学号AND课程,课程号=inserted.课程号)=0 ROLL-BACK TRANSACTION GO CREATE TRICGER sc_up-date ON FOR UPDATE AS IF (SELECT COUNT(*)
FROM学生,updated,课程WHFRE学生.学号=updated.学号AND课程’.课程号=updated.课程号)=0 ROLLBACK TRANSACTION GO
6)CREArrE TRICGER delete_all ON 学生 FORDELETE AS DELETE FROM 选课 WHERE选课,学号= deleted.学号GO
7)SELECT选课,学号,学生,姓名, 学习情况中=CASE WHEN AVC(成绩)>=85 THEN‘好’WHFN AVG(成绩)>=70 AND AVG(成绩)<85THEN ‘较好’ WHEN AVG(成绩)>=60 AND AVG(成绩)<70 THEN‘一般’ WHEN AVG(成绩)<60THEN ‘较差’ FROM学生选课 WHERE学生.学号=选课.学号CROUP BY选课.学号GO
【答案解析】[解析] 主要考查了T-SQL的数据查询功能、数据定义功能和数据操纵功能。与标准SQL类似。