一、简单查询
1.1 查询姓“猴”的学生名单
1.2 查询姓名中最后一个字是“猴”的学生名单
1.3 查询姓名中带“猴”的学生名单
2. 查询姓“孟”老师的个数
二、汇总分析
- 查询课程编号为"0002"的总成绩
2. 查询选了课程的学生人数
3. 查询各科成绩最高和最低的分
4. 查询每门课程被选修的学生数
5. 查询男生、女生人数
6. 查询平均成绩大于60分学生的学号和平均成绩
7. 查询至少选修两门课程的学生学号
8. 查询同名同姓学生名单并统计同名人数
9. 查询不及格的课程并按课程号从大到小排列
10. 查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列
11. 检索课程编号为“0004”且分数小于60的学生学号,结果按分数降序排列
12. 统计每门课程的学生选修人数(超过2人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排序,若人数相同,按课程号升序排序
13. 查询两门及以上不及格课程的同学的学号及其平均成绩
三、复杂查询
- 查询所有课程成绩小于60分学生的学号、姓名
2. 查询没有学全所有课的学生的学号、姓名
3. 查询出只选修了两门课程的全部学生的学号和姓名
4. 查询出1990年出生的学生名单
【面试题类型】topN问题
- 分组取每组最大值
案例:按课程号分组取成绩最大值所在行的数据
Tips:利用关联子查询
- 分组取每组最小值
案例:按课程号分组取成绩最小值所在行的数据
Tips:同样利用关联子查询
- 每组最大的N条记录
案例:查询各科成绩前两名的记录
四、多表查询
问题:下面是学生的名单,表名为“学生表”;近视学生的名单,表名为“近视学生表”。请问不是近视眼的学生都有谁?(“学生表”表中的学号与“近视学生表”表中的学生学号一一对应)
遇到要查找“不在表里的数据,也就是在表A里的数据,但是不在表B里的数据。”可以使用下图黑框里的sql语句(在left join和right join的基础上添加限制条件)
【举一反三】
查找“不在表里的数据”应用案例:
某网站包含两个表,顾客姓名表(表名Customers)和购买记录表(表名Orders)。找出所有从不订购任何东西的客户。(“顾客姓名表”表中的ID与“购买记录表”表中的学生学号CustomerId一一对应)
练习:联结
- 查询所有学生的学号、姓名、选课数、总成绩
2. 查询平均成绩大于85的所有学生的学号、姓名和平均成绩
3. 查询学生的选课情况:学号,姓名,课程号,课程名称
Case表达式练习:
- 查询出每门课程的及格人数和不及格人数
2. 使用分段[100-85],[85-70],[70-60],[<60]来统计各科成绩,分别统计:各分数段人数,课程号和课程名称
内联结练习:
- 查询课程编号为0003且课程成绩在80分以上的学生的学号和姓名
【sql行转列】
下面是学生的成绩表(表名score,列名:学号、课程号、成绩)
使用sql实现将该表行转列为下面的表结构
可以分为三步:
第一步:使用都是常量的列输出目标表的结构
select 学号,'课程号0001','课程号0002','课程号0003'
from score;
第二步:使用case表达式,来替换常量列对应的成绩
select 学号,
(case 课程号 when '0001' then 成绩 else 0 end)
as '课程号0001',
(case 课程号 when '0002' then 成绩 else 0 end)
as '课程号0002',
(case 课程号 when '0003' then 成绩 else 0 end)
as '课程号0003'
from score;
在这个查询结果中,每一行实际表示了某个学生某一门课程的成绩。例如,第一行是'学号0001'选修'课程号00001'的成绩,而其他两列的'课程号0002'和'课程号0003'成绩为0。
每个学生选修某门课程的成绩在下图的每个方块内。我们可以通过分组,取出每门课程的成绩。
第三步:分组,并且使用最大值函数max取出上图每个方块里的最大值
select 学号,
max(case 课程号 when '0001' then 成绩 else 0 end)
as '课程号0001',
max(case 课程号 when '0002' then 成绩 else 0 end)
as '课程号0002',
max(case 课程号 when '0003' then 成绩 else 0 end)
as '课程号0003'
from score
group by 学号;
这样就达到了行列互换的目的。
以上就是第六节课程《sql求职面试题》的内容。
PS. 部分题目其实是之前课程里的例题,但是有些做起来也不是那么顺手,会有出现混淆等问题,需要提醒自己有空能经常回顾之前的课程内容并且进行练习。