SQL面试题精华:查询高分学生与成绩比较

需积分: 9 3 下载量 119 浏览量 更新于2024-09-09 收藏 58KB DOC 举报
在IT面试中,SQL是数据管理和查询语言的核心部分,特别是在Java开发中与数据库交互时。本文将围绕三个具体的SQL查询问题进行深入解析,并结合提供的数据库表结构来展示如何编写相应的SQL语句。 第一个问题涉及查询所有在所有课程成绩都大于80分的学生。假设我们有名为`student`的表,包含`name`、`score`和`course`字段,可以用以下SQL语句实现: ```sql SELECT name FROM student GROUP BY name HAVING COUNT(score) = COUNT(CASE WHEN score > 80 THEN 1 ELSE NULL END); ``` 这个查询使用`GROUP BY`按名字分组,然后通过`HAVING`子句检查每个学生所有课程分数大于80分的数量是否等于课程总数,确保每个课程成绩都达到标准。 第二个问题是针对`student`表和`sc`表(分别表示学生和选课记录),目的是找出课程001的成绩大于课程002的学生学号。这里需要通过子查询获取每个课程的成绩,然后做比较。SQL语句如下: ```sql SELECT s.sno FROM sc s INNER JOIN ( SELECT sno, grade FROM sc WHERE cno = (SELECT cno FROM course WHERE cname = '001') ) AS subquery1 ON s.sno = subquery1.sno WHERE s.cno > ( SELECT cno FROM course WHERE cname = '002' ); ``` 这段代码首先找到课程001的学生学号,然后筛选出其成绩大于课程002对应成绩的学生。 第三个问题是关于根据比赛日志数据生成胜负统计。给定的表`match`包含日期和胜负信息,我们需要统计每个日期的胜场数和负场数。可以使用`GROUP BY`和`CASE`语句实现: ```sql SELECT date, SUM( CASE WHEN shengfu = '胜' THEN 1 ELSE 0 END ) AS wins, SUM( CASE WHEN shengfu = '负' THEN 1 ELSE 0 END ) AS losses FROM match GROUP BY date; ``` 这个查询会按日期对比赛结果进行分组,计算每个日期的胜利次数(胜)和失败次数(负),最后得出结果格式为日期和对应的胜败次数。 SQL在Java编程中扮演着关键角色,熟练掌握SQL查询技巧对于处理数据和优化数据库操作至关重要。理解并能够灵活运用这些SQL语句,无论是面试还是日常开发,都能提升工作效率。