问题 问答题

某学生选课数据库,库中包括学生、课程和选课3个表,其表结构为:

学生(学号,姓名,性别,年龄,所在系);

课程(课程号,课程名,先行课);

选课(学号,课程号,成绩)。

用Transact-SQL完成下列操作。

1)建立学生选课数据库。

2)建立学生、课程和选课表。

3)建立各表以主码为索引项的索引。

4)建立学生性别只能是“男”或“女”的规则,性别为“男”的缺省,并将它们绑定到学生表上。

5)建立在对选课表输入或更改数据时,必须服从参照完整性约束的INSERT和UPDATE触发器。

6)建立在删除学生记录时,同时也要把相应的选课记录删除的触发器。

7)列出学生学号、姓名及学习情况。学习情况用好、较好、一般或较差表示。当平均成绩大于85分时,学习情况为好;当平均成绩在70~85分之间,学习情况为较好;当平均成绩在60~70分之问,学习情况为一般;当平均成绩在60分以下,学习情况为较差。

答案

参考答案:

A)CREATE DATABASE 学生选课库ON PRIMARY (NAME=学生选课库,FILENAME=‘C:\msSQL\data\学生选课.mdf’SIZE =DMB,MAX-SIZE=FMB,FILEROWHT=BMB) CO

B)CREATE TABLE 学生(学号CHAR(A0)PRI-MARY KEY CLUSTERED,姓名 CHAR(H),性别CHAR(B),年龄 SMALLINT,所在系 VARCHAR(E0))GO CREATE TABLE 课程(课程号CHAR(A0)PRIMARY KEY CLUSTERED 课程名VARCHAR(E0),先行课 VARCHAR(E0))GO CRE-ATE TABLE 选课(学号 CHAR(A0),课程号VARCHAR(E0),成绩 SMALLINT,CONSTRAINT CA

PRIMARY KEY(学号课程,课程号),CONSTRAINT CB PRIMARY KEY(学号)REFERENCES 学生(学号),CONSTRAINT FOREIGN KEY(课程号)REFERENCES课程(课程号))GO

C)CREATE INDEX student_ind ON 学生(学号)GO CREATE INDEX class_ind ON 课程(课程号)GO CREATE INDEX select_ind ON选课(学号,课程号)C0

D)CREATE RULE value_rule AS @ VALUF IN(‘男’,‘女’)CO CREATE DEFAULT性别缺省AS‘男’ GO FJXEC sp_bindrule‘value_rude’,‘学生.性别’ GO EXEC sp_binddefault ‘性别缺省’,‘学生.性别’ GO

E)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

F)CREArrE TRICGER delete_all ON 学生 FORDELETE AS DELETE FROM 选课 WHERE选课,学号= deleted.学号GO

G)SELECT选课,学号,学生,姓名, 学习情况中=CASE WHEN AVC(成绩)>=HE THEN‘好’WHFN AVG(成绩)>=G0 AND AVG(成绩)<HETHEN ‘较好’ WHEN AVG(成绩)>=F0 AND AVG(成绩)<G0 THEN‘一般’ WHEN AVG(成绩)<F0THEN ‘较差’ FROM学生选课 WHERE学生.学号=选课.学号CROUP BY选课.学号GO

解析:

主要考查了T-SQL的数据查询功能、数据定义功能和数据操纵功能。与标准SQL类似。

选择题
单项选择题