3.2 假设给你一个关系grade_points(grade, points),它提供从takes关系中用字母表示的成绩等级到数字表示的得分之间的转换。例如,‘A’等级可指定为对应于4分,‘A-’对应于3.7分,‘B+’对应于3.3分,‘B’对应于3分,等等。学生在某门课程(课程段)上所获得的等级分值被定义为该课程段的学分乘以该生得到的成绩所对应的数字表示的得分。
给定上述关系和我们的大学模式,用SQL写出下面的每个查询。为简单起见,可以假设没有任何takes元组在grade上取null值。
看到这,首先我们需要创建关系表grade_points,并且添加数据,执行如下sql:
create table grade_points(
grade varchar(2),
points numeric(2, 1) check (points >= 0),
primary key (grade)
);
insert into grade_points values('A', 4);insert into grade_points values('A-', 3.7);
insert into grade_points values('B+', 3.3);insert into grade_points values('B', 3);
insert into grade_points values('B-', 2.7);
insert into grade_points values('C+', 2.3);insert into grade_points values('C', 2);
insert into grade_points values('C-', 1.7);
insert into grade_points values('D+', 1.3);insert into grade_points values('D', 1);
insert into grade_points values('D-', 0.7);
insert into grade_points values('F+', 0.3);insert into grade_points values('F', 0);
然后再从数据库中检索,可以看到成功创建关系并生成数据:
题目上中说没有任何takes在grade上取null值,我们需要确认一下:
发现还是有空值的,我们暂且不管了。