一道 SQL 面试题
这是我在2002年左右,给公司出的一道SQL面试大题,前10(1~10)问,允许应考者充分准备不必现场作答,
后3(11~13)问要求应考者现场作答。当年被面试的人,对题目褒贬不一。
作为命题者(准确的说其中一些题目应该是我从一些经典的SQL考试题派生出来的),我的初衷还是主要考察
关系运算、集合运算相关的SQL查询语法知识的,能轻松应答的人,我个人认为,应该算是一个颇有"SQL查询"编写经验,
或者说熟练掌握了"SQL DML语法"的开发人员了。
,然而在实际工作中,虽然"一句蔚为壮观的SQL" 实现了 "功能",但是这 "一句SQL" 究竟执行的 "性能" 如何呢?
我想提醒读者,这些题目的答案不一定适用在实际的工作中。
一些参考答案及分析过几天贴出来。
有兴趣的网友可以在线回复作答一下,讨论一下
二维关系表 T(F1,F2,F3,F4,F5,F6,F7) 表示如下关系:
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│ 学生ID │ 学生姓名 │ 课程ID │ 课程名称 │ 成绩 │ 教师ID │ 教师姓名 │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ S3 │ 王五 │ K4 │ 政治 │ 53 │ T4 │ 赵老师 │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ S1 │ 张三 │ K1 │ 数学 │ 61 │ T1 │ 张老师 │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ S2 │ 李四 │ K3 │ 英语 │ 88 │ T3 │ 李老师 │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ S1 │ 张三 │ K4 │ 政治 │ 77 │ T4 │ 赵老师 │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ S2 │ 李四 │ K4 │ 政治 │ 67 │ T5 │ 周老师 │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ S3 │ 王五 │ K2 │ 语文 │ 90 │ T2 │ 王老师 │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ S3 │ 王五 │ K1 │ 数学 │ 55 │ T1 │ 张老师 │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ S1 │ 张三 │ K2 │ 语文 │ 81 │ T2 │ 王老师 │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ S4 │ 赵六 │ K2 │ 语文 │ 59 │ T1 │ 王老师 │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ S1 │ 张三 │ K3 │ 英语 │ 37 │ T3 │ 李老师 │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ S2 │ 李四 │ K1 │ 数学 │ 81 │ T1 │ 张老师 │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ .... │ │ │ │ │ │ │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ .... │ │ │ │ │ │ │
└─────┴─────┴─────┴─────┴─────┴─────┴─────┘
请以一句 T-SQL (Ms SQL Server 2000) 或 Jet SQL (Ms Access) 作答!
1.如果 T 表还有一字段 F0 数据类型为自动增量整型(唯一,不会重复),
而且 T 表中含有除 F0 字段外,请删除其它字段完全相同的重复多余的脏记录数据(要保留其中的一条):
2.查询列印各科成绩最高和最低的记录: (就是各门课程的最高、最低分的学生和老师)
课程ID,课程名称,最高分,学生ID,学生姓名,教师ID,教师姓名,最低分,学生ID,学生姓名,教师ID,教师姓名
3.按成绩从高到低顺序,查询列印所有学生四门(数学,语文,英语,政治)课程成绩: (就是每个学生的四门课程的成绩单)
学生ID,学生姓名,数学,语文,英语,政治,有效课程数,有效平均分
(注: 有效课程即在 T 表中有该学生的成绩记录,如不明白可不列印"有效课程数"和"有效平均分")
4.查询列印数学成绩第 10 名到第 15 名的学生成绩单
或列印平均成绩第 10 名到第 15 名的学生成绩单
[学生ID],[学生姓名],数学,语文,英语,政治,平均成绩
5.按各科不及格率的百分数从低到高和平均成绩从高到低顺序,查询统计列印各科平均成绩和不及格率的百分数(用"N行"表示): (就是分析哪门课程难)
课程ID,课程名称,平均成绩,及格百分数
6.查询列印四门课程平均成绩和及格率的百分数(用"1行4列"表示): (就是分析哪门课程难)
数学平均分,数学及格百分数,语文平均分,语文及格百分数,英语平均分,英语及格百分数,政治平均分,政治及格百分数
7.按不同老师所教不同课程平均分从高到低,查询列印: (就是分析哪个老师的哪个课程水平高)
教师ID,教师姓名,课程ID,课程名称,平均分 (平均分按去掉一个最高分和一个最低分后取)
8.查询统计列印各科成绩,各分数段人数:
课程ID,课程名称,[100-85],[85-70],[70-60],[<60]
9.查询列印学生平均成绩及其名次
10.查询列印各科成绩前三名的记录:(不考虑成绩并列情况)
学生ID,学生姓名,课程ID,课程名称,成绩,教师ID,教师姓名
11.查询列印参加了所有考试科目的学生
12.查询列印"至少"与学生"S3 (王五)"参加了相同考试科目的学生
13.规范化