【数据库系统概论】作业6 第八章 习题2、第九章 习题9

一、要求:

1.请完成第8、9章作业,习题8第2题,习题9第3题,提交文档。

二、题目:

第八章 数据库编程

2.对学生-课程数据库编写存储过程,完成下述功能∶

(1)统计离散数学的成绩分布情况,即按照各分数段统计人数
1.建表Rank

DROP TABLE IF EXISTS Rank;
CREATE TABLE Rank(
	Grade CHAR(20),              -- 成绩划分等级
	num INT            -- 该分数段人数
)
INSERT INTO Rank
VALUES('[0,20)',0),('[20,40)',0),('[40,60)',0),('[60,80)',0),('[80,100]',0);
SELECT * FROM Rank

IF(EXISTS(SELECT * FROM sys.objects WHERE name='Proc_Grade'))
DROP PROCEDURE Proc_Grade
GO 
CREATE PROCEDURE Proc_Grade
AS 
DECLARE 
@less20 INT,
@20to40 INT,
@40to60 INT,
@60to80 INT,
@80to100 INT,
@Cno CHAR(4);
SELECT @Cno=Cno FROM Course WHERE Cname='离散数学';--统计各个分数段人数
SELECT @less20=COUNT(*) FROM SC WHERE Grade<20 AND Cno=@Cno; -- 将该分数段的人存储在@less20中
UPDATE Rank SET num=@less20 WHERE Grade='[0,20)';
SELECT @20to40=COUNT(*) FROM SC WHERE Grade<40 AND Grade>=20 AND Cno=@Cno;
UPDATE Rank SET num=@20to40 WHERE Grade='[20,40)';
SELECT @40to60=COUNT(*) FROM SC WHERE Grade<60 AND Grade>=40 AND Cno=@Cno;
UPDATE Rank SET num=@40to60 WHERE Grade='[40,60)';
SELECT @60to80=COUNT(*) FROM SC WHERE Grade<80 AND Grade>=60 AND Cno=@Cno;
UPDATE Rank SET num=@60to80 WHERE Grade='[60,80)';
SELECT @80to100=COUNT(*) FROM SC WHERE Grade<=100 AND Grade>=80 AND Cno=@Cno;
UPDATE Rank SET num=@80to100 WHERE Grade='[80,100]';

创建好存储过程后运行,必须先创建,再EXEC。

EXEC Proc_Grade;
SELECT *FROM SC WHERE Cno=8
SELECT *FROM Rank

第九章 关系查询处理和查询优化

3.对学生-课程数据库,查询信息系学生选修了的所有课程名称。

SELECT Cname
FROM Student, Course, SC
WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno AND Student.Sdept='IS';

试画出用关系代数表示的语法树,并用关系代数表达式优化算法对原始的语法树进行优化处理,画出优化后的标准语法树。
最初的语法树:

关系代数语法树:

优化后:

猜你喜欢

转载自blog.csdn.net/weixin_44893902/article/details/129599314