SQL查询实战:从基础到进阶

版权申诉
0 下载量 69 浏览量 更新于2024-08-23 收藏 13KB DOCX 举报
"SQL查询语句练习文档包含了多个与数据库操作相关的练习题目,涉及学生、课程、教师和成绩等表的关联查询、分组聚合、条件过滤等常见SQL操作。" 在Java面试中,掌握SQL查询是至关重要的,因为数据库操作是大多数应用程序的基础。以下是对给出的SQL练习题目的详细解释: 1. 查询“001”课程比“002”课程成绩高的所有学生的学号: 这个查询使用了子查询,先分别找出“001”和“002”课程的成绩,然后通过比较这两个子查询的结果找出成绩更高的学生。`a.score > b.score and a.s# = b.s#` 这部分条件确保了只有当同一学生的“001”课程成绩高于“002”课程时,才会被选中。 2. 查询平均成绩大于60分的同学的学号和平均成绩: 此查询使用了`GROUP BY`和`HAVING`子句。`GROUP BY S#`按学生学号进行分组,`AVG(score)`计算每个学生的平均成绩,而`HAVING AVG(score) > 60`则筛选出平均成绩超过60分的学生。 3. 查询所有同学的学号、姓名、选课数、总成绩: 此查询通过`LEFT OUTER JOIN`连接`Student`和`SC`表,确保所有学生的信息都能显示,即使他们没有成绩。`COUNT(SC.C#)`计算每名学生的选课数,`SUM(score)`求出总成绩。`GROUP BY`按照学号和姓名分组,确保每个学生只有一条记录。 4. 查询姓“李”的老师的个数: 利用`LIKE`关键字匹配姓“李”的老师,`DISTINCT`确保计数时不会重复。`COUNT(DISTINCT(Tname))`计算不重复的“李”姓老师数量。 5. 查询没学过“叶平”老师课的同学的学号、姓名: 通过`NOT IN`操作符,找出没有出现在与“叶平”老师关联的课程记录中的学生。`SELECT DISTINCT(SC.S#)`确保只考虑不同的学号。 6. 查询学过“001”并且也学过编号“002”课程的同学的学号、姓名: 首先,找出学过“001”课程的学生,然后使用`EXISTS`子句检查这些学生是否也学过“002”课程。这确保了结果中包含同时学过这两门课程的学生。 7. 查询学过“叶平”老师所教的所有课的同学的学号、姓名: 这个查询涉及到多表联接和子查询。先找到“叶平”老师教授的所有课程,然后检查哪些学生选修了所有这些课程。`INNER JOIN`和`WHERE`子句确保了只显示符合要求的学生。 以上SQL查询展示了如何处理复杂的数据关系,包括子查询、连接操作、聚合函数、条件过滤和分组,这些都是在实际开发中处理数据库数据时常见的技巧和方法。熟悉并熟练运用这些技能对于Java开发者来说至关重要,特别是在面试中,它们是评估候选人数据库操作能力的重要标准。