接着上一篇的题
这个是比较简单的写法,一步步来先看题目说的是查询没学过“谌燕”老师的课的学生信息
先从“谌燕”老师下手,查出“谌燕”老师的id ,知道该老师的id后再查出该老师是上什么课的,一直查到关联的学生信息(好啰嗦),in:逻辑运算符,用于查询符合的数据,在课程表里查找出该老师id的课程行,以上操作同理,not in:就是与之不符合的数据
直接说,先在成绩表分别查出学过‘c001’和‘c002’的成绩表信息,
再在学生表里判断即等于‘c001’也等于‘c002’的学生id的信息
这题是比这两课程的成绩。
还是先在成绩表分别查出学过‘c001’和‘c002’的成绩表信息,
分为a、b两组,判断出在相同学生id的情况下对比b组比a组成绩低的学生id
再用该学生id在学生表中查找出对应的学生信息
成绩表里包含了所有有成绩的课程
在成绩表里直接判断出小于60成绩的成绩表里的学生id
再在学生表里查找出该学生id的学生信息
这题用到的是左连接
这里的意思是所有的学生表的学生id匹配成绩表的学生id
Count() 函数返回每个组中的行数。
Group by 根据by指定的规则对数据进行分组
根据指定的条件列表进行分组
这里意思是每个学生id和学生姓名的课程数是多少
Having 子句通常与[GROUP BY]子句一起使用,以根据指定的条件列表过滤分组。
这里意思是每个学生id和学生姓名的课程数小于全部课程,
那么过滤出来的就是没有学全所有课的同学
先查出‘s001’同学学过的课
再在成绩表里查询与之相同课程,记得要排除自己也就是‘s001’
再用相同课程的学生id在学生表里查出相关的同学信息
查只学过一门课的学生
这要用左连接把所有学生跟成绩表匹配
对每个学生id和姓名的课程多少进行分组
然后过滤只有一组的数据