具体题目来源于:https://zhuanlan.zhihu.com/p/43289968
Question:
查询修过课程编号1、2的学生信息
Thinking:
为了查询出一个学生读了两门课程,直接and操作会报错,正确的思维导图应该是:
先查询出读了单门课程的学生表,然后进行合拼找出学生编号,在查询相关信息 (或者先选出1、2号课程的学生,然后分组筛选 count=2 的学生)
Answer:
Question:
查询所有成绩小于60的学生
Thinking:
1、 先查询小于60分的成绩表 ,建立成(s_id,count)
2、 再查询每个学生修过的课程数目,也建立成(s_id,count)
3、 内连接,选取出相同的数目(key=count)
Answer:
Question:
查询没有学满课程的学生信息
Thinking:
先建立联合表(left join on!),再分组筛选(having)
Answer:
Question:
建立一个 (学生id 语文 数学 英语 平均成绩 )的表格,按照降序排列
Thinking:
case when…then…else…end可以用来逐个输出英语数学语文成绩
Answer:
Question:
查询与学号为1同学的相同课程
Thinking:
先查找出没有学习01、02、03课程的学生
再判断其余的学生是否跟目标同学修完相同的课程数目
Answer:
Question:
计算每一门课程的最大值、最小值、平均值、及格率
Thinking:
用case when 输出每一门课程及格的学生数目,方便计算及格率
Answer:
Question:
计算每一门课程的在不同区间的学生个数
Thinking:
用case when来计数构造不同的区间
Answer:
【case when 与sum或count结合可以用来计数】
【order by 可以用先升序再降序排列】
Question:
查询一个学生考的课程成绩相同的信息
Thinking:
1、 先筛选学习课程大于2门(包含2)的学生
2、 再筛选成绩相同的学生(因为这些学生分组后只有一个score)
Answer:
【floor向下取整 datediff计算 间隔天数】
【month() now()的用法】
筛选当天这个月份生日的学生
【concat连接 substring截取】