SQL练习:查询分析与高级操作

需积分: 0 1 下载量 179 浏览量 更新于2024-06-30 1 收藏 343KB PDF 举报
"这是一组综合性的SQL练习题目,旨在测试和提升对SQL查询语言的理解和运用能力。涉及的数据表包括学生(Student)、课程(Course)、成绩(SC)和教师(Teacher)四张表。练习内容包括比较不同课程的成绩、查询平均成绩、获取学生全貌信息、统计特定姓氏教师数量、找出未上过特定老师课程的学生以及查找同时学习过两门特定课程的学生等。" 在这些题目中,我们主要涉及以下SQL知识点: 1. 子查询:在第一个问题中,使用了子查询来分别选取"201"和"202"课程的成绩,并通过比较找到成绩更高的学生学号。这展示了如何利用子查询来获取独立的结果集进行比较。 2. 聚合函数与HAVING子句:第二个问题中,使用`AVG()`函数计算每个学生的平均成绩,然后通过`GROUP BY`和`HAVING`子句筛选出平均成绩超过60分的学生。 3. JOIN操作:第三个问题展示了如何通过`LEFT OUTER JOIN`将学生表和成绩表连接,以便获取每个学生的学号、姓名、选课数和总成绩。`COUNT()`用于计算选课数,`SUM()`用于计算总成绩。 4. LIKE运算符与COUNT()函数:第四题中,使用`LIKE '李%'`匹配姓“李”的老师,配合`COUNT(DISTINCT Tname)`统计不重复的老师人数。 5. NOT IN子句:第五题有两种解法,都利用了`NOT IN`来排除学过特定老师课程的学生。方法一是通过子查询找到上过“叶平”老师课程的学生学号,然后排除这些学号。方法二是先找出“叶平”教过的课程编号,再排除这些课程的学生。 6. 交集查询:第六题中,要找出同时学过"201"和"202"课程的学生。这需要两个子查询,分别找出学过这两门课程的学生学号,然后使用`INTERSECT`或`IN`操作符找出两个结果集的交集。 7. WHERE子句与IN运算符:第七题与第六题类似,但可能涉及到查找学过"叶平"老师任课的所有课程的学生,可以通过`WHERE TID = (SELECT TID FROM Teacher WHERE Tname = '叶平')`来定位到"叶平"的教师ID,然后结合其他子查询完成题目。 以上这些问题覆盖了SQL的基础操作,如选择、分组、连接、子查询、聚合函数、条件过滤等,是SQL学习中的常见应用场景。掌握这些技能对于处理数据库查询和数据分析工作至关重要。