Oracle数据库练习:复杂SQL查询挑战

需积分: 7 0 下载量 28 浏览量 更新于2024-09-14 收藏 15KB DOCX 举报
"Oracle试题集,包括基础练习题,考察对Oracle数据库操作的掌握。" 在这些Oracle试题中,我们可以看到一些基本的SQL查询技巧和概念的运用,这将有助于我们理解如何在实际环境中处理数据。 (1)问题要求找出购买商品种类超过两种的购物人记录。这需要使用GROUP BY和HAVING子句来分组购物人并计算他们购买的不同商品种类数。答案可能如下: ```sql SELECT 购物人 FROM 购物信息 GROUP BY 购物人 HAVING COUNT(DISTINCT 商品名称) >= 2; ``` (2)第二个问题是找出所有课程成绩均合格(即分数大于等于60)的学生信息。这可以通过连接“成绩表”自身并应用WHERE子句来实现,确保每个学生的所有课程分数都合格。答案可能如下: ```sql SELECT 姓名, 课程, 分数 FROM 成绩表 WHERE 分数 >= 60 AND 姓名 IN ( SELECT 姓名 FROM 成绩表 GROUP BY 姓名 HAVING COUNT(*) = (SELECT COUNT(DISTINCT 课程) FROM 成绩表) ); ``` (3)第三个问题要求找到平均进价低于2元的商品名称。这需要先计算每种商品的平均价格,然后筛选出符合条件的商品。答案可能如下: ```sql SELECT 名称 FROM 商品表 GROUP BY 名称 HAVING AVG(进价) < 2; ``` (4)第四个问题需要找出高考总分(所有科目的分数之和)在600分以上的学生准考证号。由于数据重复,首先需要去重,然后计算总分。答案可能如下: ```sql SELECT DISTINCT 准考证号 FROM ( SELECT 准考证号, SUM(成绩) AS 总分 FROM 高考信息表 GROUP BY 准考证号 ) 总分表 WHERE 总分 >= 600; ``` (5)第五个问题与第四个类似,但数据已经按准考证号和科目聚合,可以直接计算总分。答案如下: ```sql SELECT 准考证号 FROM ( SELECT 准考证号, SUM(成绩) AS 总分 FROM 高考信息表 GROUP BY 准考证号 ) 总分表 WHERE 总分 >= 600; ``` (6)第六个问题的描述不完整,但看起来可能是在询问关于俱乐部成员的性别分布。如果需要找出男性和女性的成员数量,可以使用COUNT函数和CASE语句: ```sql SELECT id, COUNT(CASE WHEN gender = '男' THEN 1 END) AS 男性人数, COUNT(CASE WHEN gender = '女' THEN 1 END) AS 女性人数 FROM club GROUP BY id; ``` 这将返回每个id对应的男性和女性成员数量。 以上解答涵盖了Oracle SQL中的基础查询、聚合函数、分组、连接、子查询以及条件判断等关键知识点。通过解决这些问题,可以深入理解和熟练掌握Oracle数据库操作。