MySql综合题目练习--class,student,score,course,teacher

1、查询所有的课程的名称以及对应的任课老师姓名

2、查询学生表中男女生各有多少人

3、查询物理成绩等于100的学生的姓名

4、查询平均成绩大于八十分的同学的姓名和平均成绩

5、查询所有学生的学号,姓名,选课数,总成绩

6 查询姓李老师的个数

7 查询没有报李平老师课的学生姓名

8 查询物理课程比生物课程高的学生的学号

9 查询没有同时选修物理课程和体育课程的学生姓名

10、查询挂科超过两门(包括两门)的学生姓名和班级、查询选修了所有课程的学生姓名

12、查询李平老师教的课程的所有成绩记录

13、查询全部学生都选修了的课程号和课程名

14、查询每门课程被选修的次数

15、查询只选修了一门课程的学生姓名和学号

16、查询所有学生考出的成绩并按从高到低排序(成绩去重)

17、查询平均成绩大于85的学生姓名和平均成绩

18、查询生物成绩不及格的学生姓名和对应生物分数

19、查询在所有选修了李平老师课程的学生中,这些课程(李平老师的课程,不是所有课程)平均成绩最高的学生姓名

20、查询每门课程成绩最好的前两名学生姓名

21、查询不同课程但成绩相同的学号,课程号,成绩

22、查询没学过叶平老师课程的学生姓名以及选修的课程名称;

23、查询所有选修了学号为1的同学选修过的一门或者多门课程的同学学号和姓名;

24、任课最多的老师中学生单科成绩最高的学生姓名

-- 1、查询所有的课程的名称以及对应的任课老师姓名
SELECT course.cname,teacher.tname FROM course , teacher 
WHERE course.cid = teacher.tid;
-- 2、查询学生表中男女生各有多少人
SELECT gender , COUNT(gender) FROM student
GROUP BY gender;
-- 3、查询物理成绩等于100的学生的姓名
SELECT score.student_id , student.sname , score.num FROM course,score,student
WHERE course.cid = score.course_id 
AND student.sid = score.student_id
AND score.num = 100 
AND course.cname = "物理";
-- 4、查询平均成绩大于八十分的同学的姓名和平均成绩
SELECT sname,avgNum FROM student , (
SELECT student_id , AVG(num) AS avgNum FROM score
GROUP BY student_id
HAVING avgNum >80) temp
WHERE student.sid = temp.student_id;

-- 5、查询所有学生的学号,姓名,选课数,总成绩
SELECT sid , sname , counScore , sumScore FROM student , (
SELECT student_id , COUNT(student_id) counScore , SUM(num) sumScore FROM score
GROUP BY student_id) temp 
WHERE student.sid = temp.student_id;
-- 
-- 6、 查询姓李老师的个数
SELECT * FROM teacher
WHERE tname LIKE "李%";
-- 
-- 7、 查询没有报李平老师课的学生姓名
-- SELECT sname ,sid FROM student
-- WHERE sid in(
-- SELECT student_id FROM score
-- WHERE course_id NOT IN (
-- SELECT cid FROM teacher,course
-- WHERE teacher.tid = course.teacher_id
-- AND teacher.tname = "李平老师"));    有问题

-- (1)查询李平老师的ID找到他代课的课程ID
SELECT cid FROM teacher,course
WHERE teacher.tid = course.teacher_id
AND teacher.tname = "李平老师";
-- (2)查询参加了李平课程的学生ID
SELECT student_id FROM score
WHERE course_id IN(
SELECT cid FROM teacher,course
WHERE teacher.tid = course.teacher_id
AND teacher.tname = "李平老师")
GROUP BY student_id;
-- (3)查询没有报李平老师课的学生姓名
SELECT sname FROM student
WHERE sid NOT IN (
SELECT student_id FROM score
WHERE course_id IN(
	SELECT cid FROM teacher,course
	 WHERE teacher.tid = course.teacher_id
	   AND teacher.tname = "李平老师")
GROUP BY student_id);

-- 
-- 8、 查询物理课程比生物课程高的学生的学号
-- (1)分别查询物理课程的id以及生物课程的id
SELECT cid FROM course
WHERE cname = "物理";
SELECT cid FROM course
WHERE cname = "生物";
-- (2)分别查询选了物理课程和生物课程的学生id和成绩
SELECT student_id ,num FROM score
WHERE course_id = (SELECT cid FROM course WHERE cname = "物理");
SELECT student_id ,num FROM score
WHERE course_id = (SELECT cid FROM course WHERE cname = "生物");
-- (3)查询物理课程比生物课程高的学生的学号
SELECT tem1.student_id FROM (
SELECT student_id ,num FROM score
WHERE course_id = (SELECT cid FROM course WHERE cname = "物理")) tem1,(
SELECT student_id , num FROM score
WHERE course_id = (SELECT cid FROM course WHERE cname = "生物")) tem2
WHERE tem1.student_id = tem2.student_id AND tem1.num>tem2.num;
-- 
-- 9、 查询没有同时选修物理课程和体育课程的学生姓名
-- (1)查询选了物理和体育课程的学生id
SELECT cid FROM course
WHERE cname = "物理" or cname = "体育";

SELECT student_id FROM score
WHERE course_id IN (SELECT cid FROM course WHERE cname IN ("物理","体育"));

-- (2)查询没有同时选了者两门课程的学生id
SELECT student_id FROM score
WHERE course_id IN (SELECT cid FROM course WHERE cname IN ("物理","体育"))
GROUP BY student_id
HAVING COUNT(student_id) = 1;
-- (3)
SELECT sname FROM student
WHERE sid IN (
SELECT student_id FROM score
WHERE course_id IN (SELECT cid FROM course WHERE cname IN ("物理","体育"))
GROUP BY student_id
HAVING COUNT(student_id) = 1);
-- 
-- 10、查询挂科超过两门(包括两门)的学生姓名和班级
-- 查询两门以上课程分数低于60分的学生id
SELECT student_id FROM score
WHERE num<60
GROUP BY student_id
HAVING COUNT(student_id) >= 2;
-- 查询此学生的姓名和班级
SELECT student.sname,class.caption FROM student,class,(
SELECT student_id FROM score
WHERE num<60
GROUP BY student_id
HAVING COUNT(student_id) >= 2) temp
WHERE student.sid = temp.student_id AND student.class_id = class.cid;

-- 11、查询选修了所有课程的学生姓名
-- 查询所有课程的id
SELECT cid FROM course;
-- 查询选了所有课程的学生id
SELECT student_id FROM score
WHERE course_id IN (SELECT cid FROM course);

SELECT student_id FROM score
WHERE course_id IN (SELECT cid FROM course)
GROUP BY student_id
HAVING COUNT(student_id) = 4;
-- 查询学生姓名
SELECT sname FROM student
WHERE sid IN (
SELECT student_id FROM score
WHERE course_id IN (SELECT cid FROM course)
GROUP BY student_id
HAVING COUNT(student_id) = 4);

-- 优化
SELECT sname FROM student
WHERE sid IN (
SELECT student_id FROM score 
GROUP BY student_id
HAVING COUNT(*) = (SELECT COUNT(*) FROM course));
-- 
-- 12、查询李平老师教的课程的所有成绩记录
-- 查询李平老师所教课程的ID
SELECT cid FROM teacher,course
WHERE teacher.tid = course.teacher_id
AND teacher.tname = "李平老师";
-- 查询李平课程的学生成绩
SELECT * FROM score
WHERE course_id IN(
SELECT cid FROM teacher,course
WHERE teacher.tid = course.teacher_id
AND teacher.tname = "李平老师");
--  
-- 13、查询全部学生都选修了的课程号和课程名
-- SELECT score.student_id , course.cid , course.cname FROM score LEFT JOIN course
-- ON score.course_id = course.cid;   错误答案
SELECT cid,cname FROM course 
WHERE cid
IN (
SELECT course_id FROM score 
GROUP BY course_id
HAVING COUNT(*)= (SELECT COUNT(*) FROM student));
-- 
-- 14、查询每门课程被选修的次数
SELECT course_id , COUNT(course_id) "被选修的次数" FROM score
GROUP BY course_id;
-- 
-- 15、查询只选修了一门课程的学生姓名和学号
SELECT sname,sid FROM student
WHERE sid = (
SELECT student_id FROM score
GROUP BY student_id
HAVING COUNT(student_id) = 1);
-- 
-- 16、查询所有学生考出的成绩并按从高到低排序(成绩去重)
SELECT DISTINCT num FROM score 
ORDER BY num DESC;
-- 
-- 17、查询平均成绩大于85的学生姓名和平均成绩
-- 查询平均成绩大于85分的学生id
SELECT student_id FROM score
GROUP BY student_id
HAVING  AVG(num)>85;
-- 查询大于85分的学生姓名,和成绩
SELECT sname ,num FROM score,student
WHERE score.student_id = student.sid
AND student.sid = (
SELECT student_id FROM score
GROUP BY student_id
HAVING  AVG(num)>85);
-- 
-- 18、查询生物成绩不及格的学生姓名和对应生物分数
-- 查询生物课程id
SELECT cid FROM course
WHERE cname = "生物";
-- 查询所有选生物课程成绩不及格的学生id
SELECT student_id,num FROM score
WHERE course_id = (
SELECT cid FROM course
WHERE cname = "生物")
AND num<60;
-- 查询不及格的分数的学生姓名和分数
SELECT sname,temp.num FROM student ,(
SELECT student_id ,num FROM score
WHERE course_id = (
SELECT cid FROM course
WHERE cname = "生物")
AND num<60) temp
WHERE temp.student_id = student.sid ;

-- 
-- 19、查询在所有选修了李平老师课程的学生中,这些课程(李平老师的课程,不是所有课程)平均成绩最高的学生姓名
-- 查询李平课程ID
SELECT cid FROM teacher,course
WHERE teacher.tid = course.teacher_id
AND teacher.tname = "李平老师";
-- 查询选修了李平所有课程的学生ID
SELECT student_id FROM score
WHERE course_id IN (
SELECT cid FROM teacher,course
WHERE teacher.tid = course.teacher_id
AND teacher.tname = "李平老师")
GROUP BY student_id
HAVING COUNT(student_id) = 2;
-- 查询选修了李平所有课程的学生平均成绩
SELECT student_id , AVG(num) avgNum FROM score
WHERE course_id IN (
SELECT cid FROM teacher,course
WHERE teacher.tid = course.teacher_id
AND teacher.tname = "李平老师")
GROUP BY student_id
HAVING COUNT(student_id) = 2 ;
-- 成绩最高
SELECT sname FROM student , (
SELECT student_id , AVG(num) avgNum FROM score
WHERE course_id IN (
SELECT cid FROM teacher,course
WHERE teacher.tid = course.teacher_id
AND teacher.tname = "李平老师")
GROUP BY student_id
HAVING COUNT(student_id) = 2 ) temp
WHERE student.sid = temp.student_id
ORDER BY temp.avgNum DESC LIMIT 1;

-- 
-- 20、查询每门课程成绩最好的前两名学生姓名,成绩相同并列
-- 查询成绩最好的
SELECT MAX(num) max1Num,course_id FROM score
GROUP BY course_id;
-- 第二好成绩 并且合在一起
SELECT score.course_id,
			 max1Num,
			 MAX(num) max2Num
FROM score,(
		 SELECT MAX(num) max1Num,course_id FROM score
		 GROUP BY course_id) temp
WHERE score.course_id = temp.course_id
AND score.num < max1Num
GROUP BY score.course_id;
-- 找到对应的学生ID
SELECT student_id,score.num ,score.course_id cId FROM score , (
			 SELECT score.course_id,
						  max1Num,
						  MAX(num) max2Num
			 FROM score,(
					  SELECT MAX(num) max1Num,course_id FROM score
					  GROUP BY course_id) temp
			 WHERE score.course_id = temp.course_id
			 AND score.num < max1Num
			 GROUP BY score.course_id) temp1
WHERE score.course_id = temp1.course_id
AND score.num IN (temp1.max1Num,temp1.max2Num);
-- 最终
SELECT sname , cId FROM student , (
				SELECT student_id,score.num ,score.course_id cId FROM score , (
							 SELECT score.course_id,
											max1Num,
											MAX(num) max2Num
							 FROM score,(
										SELECT MAX(num) max1Num,course_id FROM score
										GROUP BY course_id) temp
							 WHERE score.course_id = temp.course_id
							 AND score.num < max1Num
							 GROUP BY score.course_id) temp1
				WHERE score.course_id = temp1.course_id
				AND score.num IN (temp1.max1Num,temp1.max2Num)) temp2
WHERE student.sid = temp2.student_id;
-- 
-- 21、查询不同课程但成绩相同的学号,课程号,成绩
-- 查询成绩相同的学生ID
SELECT score.student_id , score.course_id , score.num FROM score,( SELECT student_id , course_id , num FROM score) temp
WHERE score.course_id != temp.course_id
AND score.num = temp.num;
-- 
-- 22、查询没学过“李平”老师课程的学生姓名以及选修的课程名称;
-- 学过李平课程的学生ID
SELECT student_id FROM score
WHERE course_id IN(
      SELECT cid FROM teacher,course
       WHERE teacher.tid = course.teacher_id
         AND teacher.tname = "李平老师")
GROUP BY student_id;
-- 没学过李平课程的学生id,姓名
SELECT sid,sname FROM student
WHERE sid NOT IN (
			SELECT student_id FROM score
			 WHERE course_id IN(
             SELECT cid FROM teacher,course
              WHERE teacher.tid = course.teacher_id
                AND teacher.tname = "李平老师")
       GROUP BY student_id);
-- 最终结果
SELECT sName,cname FROM course RIGHT JOIN (
			 SELECT course_id , temp.sid,temp.sname sName FROM score RIGHT JOIN (
						  SELECT sid,sname FROM student
							WHERE sid NOT IN (
										SELECT student_id FROM score
										 WHERE course_id IN(
													 SELECT cid FROM teacher,course
														WHERE teacher.tid = course.teacher_id
															AND teacher.tname = "李平老师")
										 GROUP BY student_id)) temp
          ON score.student_id = temp.sid) temp2
ON course.cid = temp2.course_id;
-- 
-- 23、查询所有选修了学号为1的同学选修过的一门或者多门课程的同学学号和姓名;
-- 找到学号为1所选修的课程ID
SELECT course_id FROM score
WHERE student_id = 1;
-- 
SELECT student_id ,sname FROM score,student
WHERE student.sid = score.student_id
AND score.course_id IN (
	SELECT course_id FROM score
	WHERE student_id = 1)
GROUP BY student_id;
-- 
-- 24、任课最多的老师中学生单科成绩最高的学生姓名
-- 找到代课最多的教师ID 和课程id
SELECT teacher_id FROM course 
GROUP BY teacher_id
ORDER BY COUNT(*) DESC LIMIT 1;
-- 查找老师带的课程ID
SELECT cid FROM course
WHERE teacher_id =(
		SELECT teacher_id FROM course 
		GROUP BY teacher_id
		ORDER BY COUNT(*) DESC LIMIT 1);
-- 找到学这些课程的最高分
SELECT course_id,MAX(num) maxNum FROM score
WHERE course_id IN (
			SELECT cid FROM course
			WHERE teacher_id =(
						SELECT teacher_id FROM course 
						GROUP BY teacher_id
						ORDER BY COUNT(*) DESC LIMIT 1))
GROUP BY course_id;
-- 找到单科成绩最高的学生id
SELECT score.course_id , student_id FROM score ,(
			 SELECT course_id,MAX(num) maxNum FROM score
			 WHERE course_id IN (
						 SELECT cid FROM course
						 WHERE teacher_id =(
									 SELECT teacher_id FROM course 
									 GROUP BY teacher_id
									 ORDER BY COUNT(*) DESC LIMIT 1))
			 GROUP BY course_id) temp 
 WHERE score.course_id = temp.course_id
 AND score.num = temp.maxNum;
--  最终答案
SELECT sname FROM student , (
	     SELECT score.course_id , student_id FROM score ,(
						  SELECT course_id,MAX(num) maxNum FROM score
						  WHERE course_id IN (
									  SELECT cid FROM course
									  WHERE teacher_id =(
												  SELECT teacher_id FROM course 
												  GROUP BY teacher_id
												  ORDER BY COUNT(*) DESC LIMIT 1))
							GROUP BY course_id) temp 
				WHERE score.course_id = temp.course_id
					AND score.num = temp.maxNum) temp1
WHERE student.sid = temp1.student_id;




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MaGgIeOo0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值