mysq中的三表查询(查询获得每门课程的最高成绩的学生姓名、成绩)

文章介绍了三个SQL查询实例:一是获取每门课程的最高分学生及其信息;二是查找没有选修课程编号为2的学生;三是筛选出选修所有课程的学生。每个查询都涉及多个表的关联和条件筛选。
摘要由CSDN通过智能技术生成

案例:Student 学生表:(stuId[学号],stuName[学生姓名],stuAge[学生年龄],stuSex[学生性别]) Course 课程表:(courseld[课程编号],courseName[课程名字],teacherId[老师id]) Scores 成绩表:(stuId[学号],courseId[课程编号],score[成绩])

1.查询获得每门课程的最高成绩的学生姓名、成绩

sql语句:

SELECT student.`stuName`,scores.score,course.courseName 
FROM student,course,scores WHERE student.`stuId`=scores.stuId 
AND course.`courseld`=scores.`courseId` AND scores.`score` IN(SELECT 
  MAX(`score`) FROM scores GROUP BY `courseId`)

思路:使用子查询

优先解决分组问题得到最大学生编号,在联合查询条件是学生编号匹配。

2.查询没有选课程编号为2的学生姓名

sql语句:

 SELECT ss.`stuName` FROM student ss,scores dd WHERE ss.`stuId`=dd.`stuId` 
 AND ss.`stuId` NOT IN (SELECT scores.`stuId` FROM scores WHERE scores.`courseId`=2)

3.查询选了所有课的同学的学号、姓名

sql语句: SELECT student.`stuId`,student.`stuName` FROM student WHERE student.`stuId` IN 
 (SELECT scores.`stuId` FROM scores GROUP BY scores.`stuId` HAVING (COUNT(scores.`courseId`) = (SELECT COUNT(courseld) AS t2 FROM course)))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值