一道 SQL 面试题

时间:2021-05-12 17:07:17

这是我在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.规范化