SQL面试题精选:含Oracle高级查询

需积分: 0 4 下载量 89 浏览量 更新于2024-10-25 收藏 62KB DOC 举报
"Sql常见面试题,主要针对ORACLE数据库,包括高级SQL的运用和一些特定问题的解决。" 在SQL面试中,掌握常见的问题和高效解决方案是非常重要的。以下是一些从提供的信息中提取的关键知识点: 1. **子查询与DISTINCT**: - 问题1询问如何查询每门课都大于80分的学生。这涉及到使用子查询和DISTINCT关键字。解决方案是找到分数低于或等于80的学生,并从总名单中排除这些学生。 ```sql SELECT DISTINCT name FROM table WHERE name NOT IN (SELECT DISTINCT name FROM table WHERE score <= 80) ``` 2. **删除重复数据**: - 问题2涉及删除具有相同学号、姓名、课程编号、课程名称和分数的冗余记录,但保留其中一个(通常是最小的自动编号)。这需要使用GROUP BY和HAVING子句配合MIN函数。 ```sql DELETE FROM tablename WHERE 自动编号 NOT IN (SELECT MIN(自动编号) FROM tablename GROUP BY 学号, 姓名, 课程编号, 课程名称, 分数) ``` 3. **全连接和比赛组合**: - 创建比赛组合的问题可以通过全连接(FULL JOIN)解决,但在Oracle中,没有内置的全连接,通常用UNION ALL结合LEFT和RIGHT JOIN实现。示例中的答案使用了简单的INNER JOIN,因为名字是唯一的(假设没有平局)。 ```sql SELECT a.name, b.name FROM department a, department b WHERE a.name < b.name ``` 4. **条件聚合和比较**: - 查询TestDB中所有月份的发生额高于101科目的发生额,这需要使用子查询和聚合函数MAX。首先找到101科目每个月的最大发生额,然后与所有科目进行比较。 ```sql SELECT a.* FROM TestDB a, (SELECT Occmonth, MAX(DebitOccur) AS Debit101Occur FROM TestDB WHERE AccID = '101' GROUP BY Occmonth) b WHERE a.Occmonth = b.Occmonth AND a.DebitOccur > b.Debit101Occur ``` 面试题未完,但已展示了一些关键的SQL概念,如子查询、DISTINCT、聚合函数、JOIN和删除重复数据。在实际面试中,理解并能灵活应用这些技术是至关重要的。此外,对于ORACLE数据库,还需要了解其特有的功能,例如分区、物化视图、存储过程、触发器等。熟悉SQL标准的同时,掌握特定数据库系统的特性将使你在面试中更具竞争力。