根据提供的文件内容,我们可以整理出以下几个SQL面试题及其解答,这些问题主要聚焦于SQL查询技巧、数据处理以及数据结构的理解。 ### 1. 查询每门课都大于80分的学生姓名 **题目描述**:给定一张成绩表,其中包含学生的姓名、科目及分数。要求查询出所有科目成绩均大于80分的学生姓名。 **样例数据**: | name | kecheng | fenshu | |------|---------|--------| | 张三 | 语文 | 81 | | 张三 | 数学 | 75 | | 李四 | 语文 | 76 | | 李四 | 数学 | 90 | | 王五 | 语文 | 81 | | 王五 | 数学 | 100 | | 王五 | 英语 | 90 | **解答**: ```sql SELECT DISTINCT name FROM table WHERE name NOT IN ( SELECT DISTINCT name FROM table WHERE fenshu <= 80 ); ``` 此SQL语句首先通过子查询找出所有成绩小于等于80分的学生姓名,然后在外层查询中排除这些姓名,从而筛选出所有科目成绩均高于80分的学生。 ### 2. 删除学生表中的冗余信息 **题目描述**:给定一个学生表,该表包含了学生的自动编号、学号、姓名、课程编号、课程名称及分数等信息。要求删除除自动编号外其他字段完全相同的冗余记录。 **样例数据**: | 自动编号 | 学号 | 姓名 | 课程编号 | 课程名称 | 分数 | |----------|--------|------|----------|----------|------| | 1 | 2005001| 张三 | 0001 | 数学 | 69 | | 2 | 2005002| 李四 | 0001 | 数学 | 89 | | 3 | 2005001| 张三 | 0001 | 数学 | 69 | **解答**: ```sql DELETE FROM tablename WHERE 自动编号 NOT IN ( SELECT MIN(自动编号) FROM tablename GROUP BY 学号, 姓名, 课程编号, 课程名称, 分数 ); ``` 这条SQL语句通过子查询找出每个组内自动编号最小的记录,并在外部查询中删除除了这些记录之外的所有冗余记录。 ### 3. 显示所有可能的比赛组合 **题目描述**:有一个名为`department`的表,其中包含了一个字段`name`,共有4条记录,分别代表四个球队。要求列出所有可能的比赛组合。 **样例数据**: | name | |------| | a | | b | | c | | d | **解答**: ```sql SELECT a.name, b.name FROM team a, team b WHERE a.name < b.name; ``` 这条SQL语句通过两个表的笛卡尔积并结合条件`a.name < b.name`来过滤出所有可能的比赛组合。 ### 4. 查询所有月份的发生额都比101科目相应月份的高 **题目描述**:要求从`TestDB`数据表中查询出所有月份的发生额都比101科目的发生额高的科目。 **解答**: ```sql SELECT a.* FROM TestDB a, (SELECT Occmonth, MAX(DebitOccur) AS Debit101ccur FROM TestDB WHERE AccID = '101' GROUP BY Occmonth) b WHERE a.Occmonth = b.Occmonth AND a.DebitOccur > b.Debit101ccur; ``` 这条SQL语句通过子查询计算出101科目的每个月份的最大发生额,并在外部查询中筛选出所有发生额都比101科目高的科目。 ### 5. 把表转换为特定格式 **题目描述**:有一个表,包含年份、月份和金额三个字段。要求将表转换为特定格式,每一行表示一年,列则表示不同的月份及其对应的金额。 **样例数据**: | year | month | amount | |------|-------|--------| | 1991 | 1 | 1.1 | | 1991 | 2 | 1.2 | | 1991 | 3 | 1.3 | | 1991 | 4 | 1.4 | | 1992 | 1 | 2.1 | | 1992 | 2 | 2.2 | | 1992 | 3 | 2.3 | | 1992 | 4 | 2.4 | **解答**(Oracle SQL): ```sql SELECT year, (SELECT amount FROM aaam WHERE month = 1 AND m.year = aaa.year) AS m1, (SELECT amount FROM aaam WHERE month = 2 AND m.year = aaa.year) AS m2, (SELECT amount FROM aaam WHERE month = 3 AND m.year = aaa.year) AS m3, (SELECT amount FROM aaam WHERE month = 4 AND m.year = aaa.year) AS m4 FROM aaam GROUP BY year; ``` 这条SQL语句使用了多个子查询来分别获取指定月份的金额,并通过`GROUP BY`语句按照年份进行分组。 以上问题及解答涵盖了SQL查询的基本语法、子查询的应用、数据处理等多个方面,对于软件测试人员来说具有较高的参考价值。
- 粉丝: 29
- 资源: 16
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
- 1
- 2
前往页