学生成绩管理数据库的建立
2、构建一个教学管理关系数据库如下: 学生(学号,姓名,性别,年龄,籍贯,班级代号) 课程(课程号,课程名称,学分数,教师代号) 成绩(学号,课程号,成绩,考试时间) 教师(教师代号,姓名,性别,年龄,职称)
为方便起见,上述关系用英文字母表示如下:
S (,NAME ,SEX ,AGE ,JG ,CLASSNO )
C (CNO ,CNAME ,XF ,TNO )
G (,GRADE ,DA TE )
T (NAME ,SEX ,AGE ,ZC )
上述关系模式中,带下划线的属性为各自关系的关键字,其中学生表输入20条记录;课程表输入10条记录;成绩表输入100条记录;教师表入5条记录。基于这些关系表,做如下查询:
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9) 找出男性学生的姓名 找出不是“2031”班的学生 查询“李峰”老师所教课程的课程名称和学分 检索出选修了课程代号为“c11”和“c23”课程的学生 查询至少选修了一门“李峰”老师的课程的学生姓名 求选修了课程名为“数据库原理”的所有学生的学号和姓名 找出学生代号为“S101”和“S102”两个学生都选修了的课程 检索出没有被任何学生选修的课程 求出每个学生的成绩的平均分和总分
(10) 求至少三门以上课程成绩在90分以上的学生学号
(11) 求获得学分数在200以上的学生
(12) 求出少于10个学生选修的课程
(13) 求出有四门课程考试不及格的学生的姓名
(14) 求出每个老师所教课程的学分总数
(15) 求出教了三门课以上的老师
(16) 求出只教一门课程的老师
(17) 求出每一个班级中每一门课程获得最高分的学生的学号
对应的SOL 语句:
1)SELECT S.NAME
FROM S
WHERE ((s.sex="男"));
2)SELECT S.*
FROM S
WHERE (((S.CLASSNO) Not Like "2031"));
3)SELECT C.CNAME, C.XF, C.TNO
FROM C
WHERE (((C.TNO) Like "1"));
4)SELECT S.*
FROM S INNER JOIN G ON S.SNO=G.SNO
WHERE G.CNO Like 'c11' And EXISTS(SELECT *
FROM G AS G2
WHERE G.SNO=G2.SNO AND G2.CNO Like 'c23' );
5)SELECT S.NAME, S.SNO, G.CNO
FROM (S INNER JOIN G ON S.SNO = G.SNO) INNER JOIN C ON G.CNO = C.CNO WHERE (((G.CNO)="c11" Or (G.CNO)="c12" Or (G.CNO)="c21"));
6)SELECT S.NAME, S.SNO
FROM S INNER JOIN G ON S.SNO = G.SNO
WHERE (((G.CNO)="c13"));
7)SELECT S.SNO, G.CNO, C.CNAME
FROM (S INNER JOIN G ON S.SNO=G.SNO) INNER JOIN C ON G.CNO=C.CNO
WHERE (((S.SNO) Like 's101') AND ((Exists (SELECT * FROM G AS G2 WHERE G .CNO=G2.CNO AND G2.SNO LIKE 's102'))False));
8)SELECT C.*
FROM C
WHERE (((C.CNO) Not In (SELECT G.CNO FROM G)));
9)SELECT S.SNO, Avg(G.GRADE) AS GREAT 之平均值, Sum(G.GRADE) AS GREAT 之总计 FROM S INNER JOIN G ON S.SNO=G.SNO
GROUP BY S.SNO;
10)SELECT S.NAME, S.SNO, Count(G.GRADE) AS GRADE之计数
FROM S INNER JOIN G ON S.SNO=G.SNO
WHERE (((G.GRADE)>"90"))
GROUP BY S.NAME, S.SNO
HA VING (((Count(G.GRADE))>2));
11)SELECT S.SNO, S.NAME, Sum(G.GRADE) AS GREAT 之总计
FROM S INNER JOIN G ON S.SNO=G.SNO
GROUP BY S.SNO, S.NAME
HA VING Sum(G.GRADE)>200;
12)SELECT C.CNAME, C.CNO, Count(G.GRADE) AS GRADE之计数
FROM (S INNER JOIN G ON S.SNO=G.SNO) INNER JOIN C ON G.CNO=C.CNO GROUP BY C.CNAME, C.CNO
HA VING (((Count(G.GRADE))>9));
13)SELECT S.NAME, Count(G.GRADE) AS GRADE之计数
FROM S INNER JOIN G ON S.SNO=G.SNO
WHERE (((G.GRADE)
GROUP BY S.NAME
HA VING (((Count(G.GRADE))=4));
14)SELECT C.TNO, T.NAME, Sum(C.XF) AS XF之总计
FROM C INNER JOIN T ON C.TNO=T.TNO
GROUP BY C.TNO, T.NAME;
15)SELECT T.NAME, T.TNO, Count(C.CNO) AS CNO之计数
FROM T INNER JOIN C ON T.TNO=C.TNO
GROUP BY T.NAME, T.TNO
HA VING (((Count(C.CNO))>2));
16)SELECT T.NAME, T.TNO, Count(C.CNO) AS CNO之计数
FROM T INNER JOIN C ON T.TNO=C.TNO
GROUP BY T.NAME, T.TNO
HA VING (((Count(C.CNO))=1));
17)SELECT S.CLASSNO, G.CNO, Max(G.GRADE) AS GRADE之最大值 FROM S INNER JOIN G ON S.SNO = G.SNO
GROUP BY S.CLASSNO, G.CNO;
学生成绩管理数据库的建立
2、构建一个教学管理关系数据库如下: 学生(学号,姓名,性别,年龄,籍贯,班级代号) 课程(课程号,课程名称,学分数,教师代号) 成绩(学号,课程号,成绩,考试时间) 教师(教师代号,姓名,性别,年龄,职称)
为方便起见,上述关系用英文字母表示如下:
S (,NAME ,SEX ,AGE ,JG ,CLASSNO )
C (CNO ,CNAME ,XF ,TNO )
G (,GRADE ,DA TE )
T (NAME ,SEX ,AGE ,ZC )
上述关系模式中,带下划线的属性为各自关系的关键字,其中学生表输入20条记录;课程表输入10条记录;成绩表输入100条记录;教师表入5条记录。基于这些关系表,做如下查询:
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9) 找出男性学生的姓名 找出不是“2031”班的学生 查询“李峰”老师所教课程的课程名称和学分 检索出选修了课程代号为“c11”和“c23”课程的学生 查询至少选修了一门“李峰”老师的课程的学生姓名 求选修了课程名为“数据库原理”的所有学生的学号和姓名 找出学生代号为“S101”和“S102”两个学生都选修了的课程 检索出没有被任何学生选修的课程 求出每个学生的成绩的平均分和总分
(10) 求至少三门以上课程成绩在90分以上的学生学号
(11) 求获得学分数在200以上的学生
(12) 求出少于10个学生选修的课程
(13) 求出有四门课程考试不及格的学生的姓名
(14) 求出每个老师所教课程的学分总数
(15) 求出教了三门课以上的老师
(16) 求出只教一门课程的老师
(17) 求出每一个班级中每一门课程获得最高分的学生的学号
对应的SOL 语句:
1)SELECT S.NAME
FROM S
WHERE ((s.sex="男"));
2)SELECT S.*
FROM S
WHERE (((S.CLASSNO) Not Like "2031"));
3)SELECT C.CNAME, C.XF, C.TNO
FROM C
WHERE (((C.TNO) Like "1"));
4)SELECT S.*
FROM S INNER JOIN G ON S.SNO=G.SNO
WHERE G.CNO Like 'c11' And EXISTS(SELECT *
FROM G AS G2
WHERE G.SNO=G2.SNO AND G2.CNO Like 'c23' );
5)SELECT S.NAME, S.SNO, G.CNO
FROM (S INNER JOIN G ON S.SNO = G.SNO) INNER JOIN C ON G.CNO = C.CNO WHERE (((G.CNO)="c11" Or (G.CNO)="c12" Or (G.CNO)="c21"));
6)SELECT S.NAME, S.SNO
FROM S INNER JOIN G ON S.SNO = G.SNO
WHERE (((G.CNO)="c13"));
7)SELECT S.SNO, G.CNO, C.CNAME
FROM (S INNER JOIN G ON S.SNO=G.SNO) INNER JOIN C ON G.CNO=C.CNO
WHERE (((S.SNO) Like 's101') AND ((Exists (SELECT * FROM G AS G2 WHERE G .CNO=G2.CNO AND G2.SNO LIKE 's102'))False));
8)SELECT C.*
FROM C
WHERE (((C.CNO) Not In (SELECT G.CNO FROM G)));
9)SELECT S.SNO, Avg(G.GRADE) AS GREAT 之平均值, Sum(G.GRADE) AS GREAT 之总计 FROM S INNER JOIN G ON S.SNO=G.SNO
GROUP BY S.SNO;
10)SELECT S.NAME, S.SNO, Count(G.GRADE) AS GRADE之计数
FROM S INNER JOIN G ON S.SNO=G.SNO
WHERE (((G.GRADE)>"90"))
GROUP BY S.NAME, S.SNO
HA VING (((Count(G.GRADE))>2));
11)SELECT S.SNO, S.NAME, Sum(G.GRADE) AS GREAT 之总计
FROM S INNER JOIN G ON S.SNO=G.SNO
GROUP BY S.SNO, S.NAME
HA VING Sum(G.GRADE)>200;
12)SELECT C.CNAME, C.CNO, Count(G.GRADE) AS GRADE之计数
FROM (S INNER JOIN G ON S.SNO=G.SNO) INNER JOIN C ON G.CNO=C.CNO GROUP BY C.CNAME, C.CNO
HA VING (((Count(G.GRADE))>9));
13)SELECT S.NAME, Count(G.GRADE) AS GRADE之计数
FROM S INNER JOIN G ON S.SNO=G.SNO
WHERE (((G.GRADE)
GROUP BY S.NAME
HA VING (((Count(G.GRADE))=4));
14)SELECT C.TNO, T.NAME, Sum(C.XF) AS XF之总计
FROM C INNER JOIN T ON C.TNO=T.TNO
GROUP BY C.TNO, T.NAME;
15)SELECT T.NAME, T.TNO, Count(C.CNO) AS CNO之计数
FROM T INNER JOIN C ON T.TNO=C.TNO
GROUP BY T.NAME, T.TNO
HA VING (((Count(C.CNO))>2));
16)SELECT T.NAME, T.TNO, Count(C.CNO) AS CNO之计数
FROM T INNER JOIN C ON T.TNO=C.TNO
GROUP BY T.NAME, T.TNO
HA VING (((Count(C.CNO))=1));
17)SELECT S.CLASSNO, G.CNO, Max(G.GRADE) AS GRADE之最大值 FROM S INNER JOIN G ON S.SNO = G.SNO
GROUP BY S.CLASSNO, G.CNO;