SQL面试精华:复杂查询与去重问题解析

需积分: 26 13 下载量 200 浏览量 更新于2024-07-17 收藏 158KB PDF 举报
本文档主要探讨的是SQL面试题库中的典型问题和实例,涉及多个知识点。首先,讨论如何使用SQL查询找出每门课成绩都超过80分的学生姓名。提供三种不同的解决方案: 1. 第一种方法是通过子查询和排除法,使用`minus`操作符来找出没有低于80分课程的学生名字,如 `select stu_name from stu_grade minus select stu_name from stu_grade where grade <= 80`。 2. 第二种方法采用`not exists`来确保每个学生的所有课程成绩都没有低于80分,即 `select distinct stu_name from stu_grade where not exists (select 1 from stu_grade inner join on ou.stu_name = inn.stu_name and inn.grade <= 80)`。 3. 第三个方法利用`not in`操作符和`distinct`来避免子查询中使用组函数,如 `select distinct t1.stu_name from stu_grade t1 where t1.stu_name not in (select distinct t2.stu_name from stu_grade t2 where t2.grade <= 80)`。 接下来,针对一个学生表的数据,介绍了如何删除重复记录,但仅保留第一条具有特定条件的记录,例如自动编号不同。这涉及到使用`delete`语句配合子查询来筛选满足条件的唯一记录,但强调不能在`where`子句中直接使用`group by`。 然后,讨论了一个关于部门表`department`的问题,表中只有单个字段`name`,代表四个球队。题目要求列出所有可能的比赛组合,可以通过简单的两表连接(`teamA`和`teamB`)并按照队伍名称排序来实现,如 `select a.name, b.name from teamA, teamB where a.name < b.name`。 最后,给出了一个实际应用的例子,要求查询TestDB数据库表中某个科目(101)每月发生额,与题目中未给出具体查询语句,但暗示需要找出该科目所有月份的金额数据,这可能需要使用日期范围和JOIN操作来获取所需信息。 这些题目涵盖了SQL的基本操作、数据去重、连接查询和条件筛选等多个方面,对于准备SQL面试的人来说,这些都是重要的知识点。