SQL练习题解析:关系代数与SQL查询解答

需积分: 3 1 下载量 152 浏览量 更新于2024-07-31 收藏 265KB DOC 举报
"这些SQL练习题提供了关系代数和SQL语言的实践应用,旨在帮助提升SQL查询能力。题目涵盖了从基础的联接操作到复杂的聚合函数和子查询的使用。" 在SQL练习题中,我们可以看到一系列涉及关系数据库查询的问题。以下是这些问题的详细解释和解答: 1. 查询学号为S3学生所学课程的课程名与任课教师名。 使用关系代数:`π CNAME, TEACHER (σ SNO='S3' (S ⨝ SC ⨝ C))` 使用SQL:`SELECT C.CNAME, C.TEACHER FROM S JOIN SC ON S.SNO = SC.SNO JOIN C ON SC.CNO = C.CNO WHERE S.SNO = 'S3';` 2. 查询至少选修LIU老师所教课程中一门课的女生姓名。 使用关系代数:`π SNAME (σ SEX='F' ∧ SNO IN (π SNO (σ TEACHER='LIU' (C))) (S)` 使用SQL:`SELECT S.SNAME FROM S WHERE S.SEX = 'F' AND S.SNO IN (SELECT SC.SNO FROM SC JOIN C ON SC.CNO = C.CNO WHERE C.TEACHER = 'LIU');` 3. 查询WANG同学不学的课程的课程号。 使用关系代数:`π CNO (C) - π CNO (σ SNO='WANG' (S ⨝ SC))` 使用SQL:`SELECT C.CNO FROM C WHERE C.CNO NOT IN (SELECT SC.CNO FROM SC WHERE SC.SNO = 'WANG');` 4. 查询至少选修两门课程的学生学号。 使用关系代数:`π SNO (σ COUNT(*) >= 2 (GROUP BY SNO) (SC)` 使用SQL:`SELECT SNO FROM SC GROUP BY SNO HAVING COUNT(*) >= 2;` 5. 查询选修课程中包含LIU老师所教全部课程的学生学号。 使用关系代数:`π SNO (S) - π SNO (σ CNO NOT IN (π CNO (σ TEACHER='LIU' (C))) (S ⨝ SC)` 使用SQL:`SELECT DISTINCT S.SNO FROM S WHERE S.SNO NOT IN (SELECT SC.SNO FROM SC JOIN C ON SC.CNO = C.CNO WHERE C.TEACHER != 'LIU');` 补充作业二中的问题同样涉及到了SQL的高级查询技巧,包括分组、聚合、子查询和连接: 1. 查询门门课程都及格的学生的学号。 使用SQL:`SELECT Sno FROM SC GROUP BY Sno HAVING MIN(Grade) >= 60;` 2. 查询既有课程大于90分又有课程不及格的学生的学号。 使用SQL:`SELECT DISTINCT Sno FROM SC WHERE Sno IN (SELECT Sno FROM SC WHERE Grade > 90) AND Sno IN (SELECT Sno FROM SC WHERE Grade < 60);` 3. 查询平均分不及格的课程号和平均成绩。 使用SQL:`SELECT Cno, AVG(Grade) FROM SC GROUP BY Cno HAVING AVG(Grade) < 60;` 4. 找出至少选修了2号学生选修过的全部课程的学生号。 使用SQL:`SELECT DISTINCT Sno FROM SC AS SCX WHERE NOT EXISTS (SELECT * FROM SC AS SCY WHERE SCY.Sno = '2' AND NOT EXISTS (SELECT * FROM SC AS SCZ WHERE SCZ.Sno = SCX.Sno AND SCZ.Cno = SCY.Cno));` 5. 求各门课程去掉一个最高分和最低分后的平均分。 这个问题需要两个步骤,首先找到每个课程去掉最高分和最低分后的平均分,然后计算这个平均分。 以上就是SQL练习题的答案解析,这些题目涵盖了SQL的基本查询以及更复杂的数据分析操作,对于提升SQL技能非常有帮助。通过解决这些题目,你可以更好地理解如何在实际场景中运用SQL进行数据操作和分析。