MySQL SQL练习题解析:经典面试题挑战

需积分: 9 1 下载量 11 浏览量 更新于2024-07-14 收藏 49KB DOCX 举报
"这篇文档是关于SQL的经典练习题目集,主要针对MySQL,适合Java面试中的SQL笔试环节。文档中包含了各种类型的SQL问题,通过解答这些问题,可以提升SQL技能,特别是对于MySQL8.0.11版本的用户。文档中不仅提供了SQL语句,还有执行结果的展示,方便理解。此外,作者还挑选了一些常见的面试题,以帮助读者掌握解题思路和方法。" 在SQL面试中,以下是一些关键知识点: 1. **分组查询与条件过滤**: - `GROUP BY` 语句用于将数据按照一个或多个列进行分组。 - `HAVING` 子句用于在分组后对组进行条件过滤,与`WHERE`子句不同,`WHERE`作用于单行记录,而`HAVING`作用于分组。 例子:查询每门课都大于80分的学生姓名 ```sql SELECT name FROM table GROUP BY name HAVING MIN(grade) > 80; ``` 2. **数据去重**: - 当数据表中有重复记录时,可以使用`GROUP BY`结合聚合函数`MIN()`或`MAX()`来删除冗余信息。 例子:删除除了自动编号不同,其他都相同的学生冗余信息 ```sql DELETE FROM table_name WHERE 自动编号 NOT IN ( SELECT MIN(自动编号) FROM table_name GROUP BY 学号, 姓名, 课程编号, 课程名称, 分数 ); ``` 3. **全连接查询**: - 全连接(Full Join)用于显示所有左表和右表的记录,即使在另一个表中没有匹配的记录。 例子:显示所有可能的比赛组合 ```sql SELECT a.name, b.name FROM team a, team b WHERE a.name < b.name; ``` 4. **自连接查询与比较**: - 自连接是将同一张表作为两个不同的表进行连接,常用于解决涉及自身关系的问题。 例子:查询所有月份的发生额都比101科目相应月份的发生额高的科目 ```sql SELECT t1.subject FROM TestDB t1 JOIN TestDB t101 ON t1.month = t101.month AND t1.amount > t101.amount WHERE t101.subject = '101'; ``` 5. **聚合函数与子查询**: - `COUNT()`, `SUM()`, `AVG()`, `MIN()`, `MAX()`等聚合函数用于统计和计算。 - 子查询可以在主查询中嵌套,用于获取中间结果。 这些知识点是SQL面试中常见的,掌握它们能帮助你在面试中应对各种SQL题目。同时,注意SQL性能优化也是面试中的重要部分,虽然在文档中未强调,但在实际工作中,编写高效的SQL语句是非常重要的。