设为首页 收藏本站
查看: 672|回复: 0

随笔十六 :5大SQL练习题

[复制链接]
累计签到:504 天
连续签到:1 天
发表于 2023-9-16 10:49:29 | 显示全部楼层 |阅读模式
# 1、查询所有课程的名称以及对应的任课老师的名字
第一步,需要连表
select * from course inner join teacher on course.teacher_id=teacher.id;
第二步,需要查询什么条件
select course.cname,teacher.tname from course inner join teacher on course.teacher_id=teacher.id;

# 2、查询平均成绩大于80分的同学姓名和平均成绩
连表:
第一步
select * from student inner join score on student.sid=score.student_id
第二步,分组获取平均成绩进行过滤
select student.sid,avg(num)as avg_num from student inner join score on student.sid=score.student_id group by student.sid having avg(num)>80
第三步,拿到平均成绩在和学生表做内连接
SELECT
        student.sname,
        t1.avg_num
FROM
        student
        INNER JOIN ( SELECT
        student.sid,
        avg( num ) AS avg_num
FROM
        student
        INNER JOIN score ON student.sid = score.student_id
GROUP BY
        student.sid
HAVING
        avg( num ) > 80
        ) AS t1 ON student.sid = t1.student_id
子查询:
第一步先通过成绩表获取大于85分的同学id和平均成绩
select student_id,avg(num) from score group by student_id having avg(num)>80;
第二步通过内连接连表
select student.sname,avg(num) from student inner join
        (select student_id,avg(num) from score group by student_id having avg(num)>85) as sco
on student.sid=sco.student_id
# 3、查询没有报李平老师课程的学生姓名
分步操作:
        方法一:
        1、查询出李平老师的课程id
        select course.cid from course inner join teacher on course.teacher_id = teacher.id where tname=('李平')
        2、通过课程id查询学生id
        select distinct student_id score where course_id in (select course.cid from course inner join teacher on course.teacher_id = teacher.id where tname not in ('李平'))
        3、然后连表对于学生id取反
        SELECT
        student.sname
    FROM
        student
        INNER JOIN score ON student.sid = score.sutdent_id
    WHERE
        score.student_id in
        (select distinct student_id score where course_id in (select course.cid from course inner join teacher on course.teacher_id = teacher.id where tname not in ('李平')))
    方法二:
1、course和teacher连表,过滤出没有没有李平老师的cid
select course.cid from course inner join teacher on course.teacher_id = teacher.id where tname not in ('李平')
2、student和score连表,条件等与上表的course.cid
SELECT
        student.sname
FROM
        student
        INNER JOIN score ON student.sid = score.sutdent_id
WHERE
        course_id IN ( SELECT course.cid FROM course INNER JOIN teacher ON course.teacher_id = teacher.id WHERE tname NOT IN ( '李平' ) )
# 4、查询没有同时选修物理课程和体育课程的学生姓名,没有选的也不要
老师思路:
        1、先查询出物理和体育的课程id
        select cid from course where cname in('物理','体育')
        2、通过成绩表进行过滤课程id当条件,在进行分组过滤,拿到count为1的学生id
        select sid from score where cid in (select cid from course where cname in('物理','体育')) group by sid having count(*)=1
        3、通过学生表通过上面的学生id获取学生信息
        SELECT
                sname
    FROM
        student
    WHERE
        sid IN (
    SELECT
        sid
    FROM
        score
    WHERE
        cid IN ( SELECT cid FROM course WHERE cname IN( '物理','体育') GROUP BY sid HAVING count( * ) = 1 )
        )
自己思路:
    1、课程与成绩连表,选出学生id
    select score.sid from score inner join coures on score.course_id = course.id where course.cname in('物理','体育') group by score.sid having count(*)=1;
    2、学生表直接用sid当条件
    SELECT
        sname
    FROM
        student
    WHERE
        sid IN (
    SELECT
        score.sid
    FROM
        score
        INNER JOIN coures ON score.course_id = course.id
    where
        course.cname in('物理','体育')        
    GROUP BY
        score.sid
    HAVING
        count( * ) = 1
        )
# 5、查询挂科成绩超过2门(包括2门)的学生成绩和班级(学生姓名)
1、在成绩表中对于学生分组,通过where score<60,having>=2,拿到学生的sid,score
select sid,score from score where score<60 group by sid having count(*)>=2

2、与学生表进行连表取出score,class_id,再去和班级表连表
select student.class_id,t1.score from student inner join (select sid,score from score group by sid having count(*)>=2) t1
on student.id=t1.sid
3、在和班级连表
SELECT
        t2.score,
        calss.captian
FROM
        class
        INNER JOIN (
select student.class_id,t1.score from student inner join (select sid,score from score group by sid having count(*)>=2) t1
on student.id=t1.sid
        ) t2 ON class.id = t2.class_id

1694344925810.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-1004047-1-1.html 上篇帖子: 随笔十五 :手写单例模式(加锁) 下篇帖子: 随笔十七 :SQL查询具体用法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表