ЛGrade(σSdept=?MA?(Student)∞SC)
8.查询所有选修“数学”的学生的学号(Cno)和成绩(Grade)。
ЛCno,Grade(σCname=?数学?(Course)∞SC)
作业四:
1.用关系代数表达式表达课本P74-75习题5 (注:只要求用关系代数完成查询) 【参考答案】
⑴求供应工程J1零件的供应商号SNO; ЛSno(σJno=‘J1’(SPJ))
⑵求供应工程J1零件P1的供应商号SNO; ЛSno(σJno=‘J1’ ∧Pno=‘P1’(SPJ)) ⑶求供应工程J1红色零件的供应商号SNO; ЛSno(σJno=‘J1’∧Color=‘红’(SPJ∞P)) 或ЛSno(σJno=‘J1’(SPJ)∞σColor=‘红’(P)) 或ЛSno(ЛSno,Pno(σJno=‘J1’(SPJ)∞ ЛPno(σColor=‘红’(P)))
⑷求没有使用天津供应商生产的红色零件的工程号
JNO;
ЛJno(J)-ЛJno(σcity=?天津?∧Color=?红?(S∞SPJ∞P)) ЛJno(J)-ЛJno(SPJ∞σcity=?天津?(S)∞σ
5
Color=?红?(P))
⑸求至少使用了S1供应商所供应的全部零件的工程号
JNO;
ЛJno,Pno(SPJ)÷ЛPno(σSno=?S1?(SPJ)) 2.根据P56的关系, 写关系代数表达式和结果关系。 【参考答案】
⑴查询所有选修了课程的女同学的姓名及所在的系; ЛSname,Sdept(σSsex=?女?(Student)∞SC) ⑵查询不作为其他课程的先行课的课程号和课程名; ЛCno,Cname((ЛCno(Course)-ЛCpno(Course))∞Course) ⑶查询IS系和CS系的学生选修的课程号和课程名; ЛCno,Cname(σSdept=?IS?∨Sdept=?CS?(Student)∞SC∞Course)
ЛCno,Cname(σSdept=?IS?(Student)∞SC∞Course)∪ЛCno,Cname(σSdept=?CS?(Student)∞SC∞Course) ⑷求得一张包括学号、姓名和成绩的学生成绩单; ЛSno,Sname,Grade(Student∞SC)
⑸列出所有参加了数据库课程考试的学生姓名和成绩。 ЛSname,Grade(σCname='数据库?(Course)∞SC∞Student)
6
作业五:
根据课本P82的学生-课程数据库,用SQL语句完成如下查询。
1)查询考试成绩90分以上(含)学生的学号,课程号及成绩 SELECT * FROM SC WHERE Grade>=90; 2)查询1号课程考试成绩在80-90(含)之间的学生人数 SELECT Count(DISTINCT Sno) FROM SC WHERE (Grade Between 80 AND 90) AND Cno=?1?; SELECT Count(DISTINCT Sno) FROM SC
WHERE (Grade>=80 AND Grade<=90 AND Cno=?1?); 3)查询没有考试成绩的学生学号
SELECT Sno FROM SC WHERE Grade IS NULL; 4)查询选修信息系统课程的最高成绩,平均成绩
SELECT Max(Grade), AVG(Grade) FROM SC,Course WHERE Cname=‘信息系统‘AND SC.Cno=Course.Cno;
SELECT Max(Grade), AVG(Grade) FROM SC WHERE Cno IN (SELECT Cno FROM Course WHERE Cname='信息系统'); 5)查询所有年龄大于平均年龄的学生学号和年龄 SELECT Sno,Sage FROM Student
WHERE Sage>(select AVG(Sage) FROM Student); 6)查询各门课的最高成绩
SELECT Cno,Max(Grade) FROM SC GROUP BY Cno;
7
7)查询每门课程均不及格的学生的学号 SELECT DISTINCT Sno FROM SC x
WHERE 60>ALL (SELECT Grade FROM SC y WHERE y.Sno=x.Sno);
SELECT Sno FROM SC GROUP BY Sno HAVING MAX(Grade)<60;
作业六:
根据课本P82的学生-课程数据库,用SQL语句完成如下查询。 1)查询选修课程成绩为90分的学生学号和姓名(使用嵌套查询) SELECT Sno,Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Grade=90);
SELECT Sno,Sname FROM Student x WHERE EXISTS(SELECT * FROM SC WHERE Grade=90 AND Sno=x.Sno);
2)找出课程成绩超过他本人平均成绩的学生的学号、课程号(使用嵌套查询)
SELECT Sno,Cno FROM SC x WHERE Grade>= (SELECT AVG(Grade) FROM SC WHERE Sno=x.Sno);
8

