SQL查询技巧:精选实战题目解析

版权申诉
0 下载量 139 浏览量 更新于2024-06-20 收藏 2.05MB PDF 举报
"SQL练习题.pdf" SQL(Structured Query Language)是一种用于管理关系数据库的语言,它被广泛应用于数据的检索、更新、插入和删除等操作。本资料提供的是一些SQL练习题,涵盖了不同的数据库系统,如MySQL、MS-SQL Server和Oracle。 1、取出表A中第31到第40记录 在MySQL中,可以使用`LIMIT`子句来实现这个功能。`LIMIT 30, 10`表示跳过前30条记录,然后返回接下来的10条记录。而在MS-SQL Server中,没有直接的`LIMIT`关键字,但可以通过结合`TOP`和子查询或`ROW_NUMBER()`函数来达到相同效果。解1和解2利用了`NOT IN`和`TOP`,解3则使用了窗口函数`ROW_NUMBER()`。 2、查询出每门课都大于80分的学生姓名 这个问题可以通过子查询或者聚合函数`GROUP BY`和`HAVING`子句解决。第一个解决方案是使用`NOT IN`和子查询来排除任何一门课程分数低于或等于80的学生。第二个解决方案则是通过`GROUP BY`将每个学生的每门课程成绩聚合在一起,然后使用`HAVING`来检查所有课程的最小分数是否都大于80。 3、删除重复的学生记录 当表中有重复记录,且仅保留其中一条时,可以使用`GROUP BY`和聚合函数来找到唯一记录。在这个例子中,我们使用`MIN(自动编号)`来找到每个组合的最小自动编号,然后在主查询中删除不在这个集合中的记录。 4、查询发生额超过101科目对应月份发生额的科目 这个问题涉及到比较不同行之间的值。首先,我们需要找出101科目每个月的发生额,然后与所有其他科目的相应月份发生额进行比较。可以使用自连接或者子查询来实现这个操作。在Jcy_Audit数据库的TestDB数据集中,可以编写一个SQL语句,先找出101科目的每个月发生额,然后将这个结果与其他所有科目的每个月发生额进行比较。 这些练习题涵盖了SQL的基础和高级特性,包括数据检索、子查询、聚合函数、窗口函数以及数据清理。它们有助于提升对SQL语言的理解和应用能力。