mysql怎么找题目 mysql题目在哪能搜( 六 )


解答:
mysql对于group by的特殊规定:
如果用了group by , select语句里除了group by后面跟着的列名以外,只能有聚合函数 。
如果除了group by后面跟着的列名和聚合函数还有其他列名,sql就会只输出第一行,而且如果是'*',也会只输出第一行记录 。
举例说明:
总结:
如果用了group by +聚合函数,那么在查询的时候最好是只查询聚合函数(+group by 后的列名)避免在查询其余字段时只显示一条记录的情况 。
注意:聚合函数是一定要查询的 。
3.查询在 SC 表存在成绩的学生信息
思路:
(1)首先确定表:sc表和student表
发现名字有重复,
(2)利用group by sid去除重复的学生信息查询 , 具体如下:
注意:更严谨的写法:
(1)先写查询分组字段的子查询
(2)将(1)中的字段进行嵌套查询
注意:group by是分开写的
4.查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null
(1)确定涉及的表的范围:
student,sc
(2)
思路:
修改:
(2)
(3)
也可以考虑先连接在查询,但还是建议上述这种方式 。
4.1 查有成绩的学生信息
(1)首先确定使用的表范围
sc和student
(2)首先获得成绩表上的学生id
(3)根据id去查学生信息
?这个和第三题是完全一样的吗
回答:思路基本一致 。
参考答案:
思路是:看学生表上的id是否在sc表的id中(即 , 判断存在)in/exists
5.查询「李」姓老师的数量
6.查询学过「张三」老师授课的同学的信息
(1)四张表都要用到
(2)四个嵌套
有什么简便方法吗?
回答:参考答案也是逐步嵌套查询实现的 。
7.查询没有学全所有课程的同学的信息
(1)关键词:‘所有课程’在course表 , ‘同学信息’在student表 , 但是二者需要sid进行关联,所以还需要用到sc表
(2)如何筛选'所有课程’??
利用课程数目来进行限定 。
a.course表获取总课程数
b.按照sid分组 , 对sc表中的课程数进行计数
c.接着从sc中筛选出课程数=3的学生sid
d.查询(3)中对应学生sid的学生信息
8.查询至少有一门课与学号为" 01 "的同学所学相同的同学的信息
(1)关键词:
‘至少有一门课’--课程in学号01同学的课程,‘学号01同学的课程’--course表,‘同学信息’--student表
(2)思路:
a. 01同学学习了什么课程
发现01同学三门课程都学了,所以其余学生只要学习的课程数大于0即可 。
b. 学号01之外的学生id有哪些
c. 如何查询其余学生的课程信息,比如cid?
利用其余学生的id进行分组再计数,筛选
出次数大于0的学生id,再根据该id进行学生信息的查询 。
9.查询和" 01 "号的同学学习的课程 完全相同的其他同学的信息
(1)确定相关表:
’01号同学学习的课程‘-sc表;
’其他同学的信息‘-student表;
(2)思路:
a. 01号同学学习了哪些课程
发现01同学学了三门课,
b.再查询总共有几门课?
所以,总共有3门课 , 01同学全部学习了 , 
c. 查询其余学生中学习课程数目为3的学生id
d. 再跟进相应id在student表中查询学生信息
10.查询没学过"张三"老师讲授的任一门课程的学生姓名
(1)确定相关表:
‘张三老师tid’--teacher;
‘张三老师授课cid’--course;

推荐阅读