高效解决SQL笔试题:查询80分以上学生姓名,删除冗余学生信息

4星 · 超过85%的资源 需积分: 10 162 下载量 94 浏览量 更新于2024-01-17 收藏 84KB DOC 举报
我精心收集和整理了一些 SQL 语句的笔试题,供大家参考和学习。其中,资源分配比较充足,希望能够满足大家的需求。 首先是第一道题目,要求用一条 SQL 语句查询出每门课都大于80分的学生姓名。给定的数据表如下: ``` 姓名 课程 分数 张三 语文 81 张三 数学 75 李四 语文 76 李四 数学 90 王五 语文 81 王五 数学 100 王五 英语 90 ``` 我们可以使用以下 SQL 语句来解决这个问题: ```sql SELECT DISTINCT name FROM table WHERE name NOT IN ( SELECT DISTINCT name FROM table WHERE fenshu <= 80 ); ``` 这条 SQL 语句会在原始表格中查询出所有分数不小于80分的学生姓名,且这些学生的姓名在其他任何一门课程的分数都不少于80分。由于题目中没有提到数据表的具体名称,所以我们使用了占位符 "table" 来表示数据表的名称。具体使用时,需要根据实际情况进行替换。 接下来是第二道题目,要求删除除了自动编号不同以外其他所有信息都相同的学生冗余信息。给定的学生表结构如下: ``` 自动编号 学号 姓名 课程编号 课程名称 分数 1        2005001  张三 0001      数学    69 2        2005002  李四 0001      数学    89 3        2005001  张三 0001      数学    69 ``` 为了删除冗余信息,我们可以使用以下 SQL 语句: ```sql DELETE FROM student WHERE (自动编号,学号,姓名,课程编号,课程名称,分数) NOT IN ( SELECT MIN(自动编号),学号,姓名,课程编号,课程名称,分数 FROM student GROUP BY 学号,姓名,课程编号,课程名称,分数 ); ``` 这条 SQL 语句会删除除了自动编号不同以外,其他所有信息都相同的学生记录。我们使用了嵌套查询来找到每个学生信息中的最小自动编号,并将其与其他信息进行比较,从而确定要删除的冗余记录。需要注意的是,这里假设冗余信息是相邻的,如果相同信息的记录散布在表中的不同位置,则需要对其进行更复杂的处理。 总而言之,这些 SQL 语句是笔试题中常见的问题,通过了解和掌握它们,可以提高我们在编写 SQL 查询语句和处理数据冗余时的能力。希望这些题目能够对大家的学习有所帮助。