• Mysql查询语句,select,inner/left/right join on,group by.....[例题及答案]


    创建如下表格,命名为stu_info, course_i, score_table.在这里插入图片描述
    题目:
    有如图所示的三张表结构,学生信息表(stu_info),课程信息表(course_i),分数信息表(score_table)

    题目:
    1.查询出每个学生所选修的课程的数量和所选修的课程的考试的平均分

    2.查询出每门课程的选修的学生的个数和学生考试的总分

    3.查询出性别一样并且年龄一样的学生的信息

    4.查询出学分一样的课程信息

    5.查询出参加了考试的学生的学号,姓名,课程号和分数

    6.查询出参加了考试的学生的学号,课程号,课程名,课程学分和分数

    7.查询出没有参加考试的学生的学号和姓名

    8.查询出没有学生选修(即没有学生考试)的课程编号、课程名和学分

    9.查询出姓名中有字母a的学生的信息

    10.查询出选修了2门课程以上的并且考试平均分在70以上的学生的学号和考试平均分以及选修课程的数量

    原创答案,仅作参考:

    -- 1.查询出每个学生所选修的课程的数量和所选修的课程的考试的平均分
    SELECT stu_info.stu_name,COUNT(course_i.course_id),AVG(score_table.score) FROM course_i 
    INNER JOIN score_table ON course_i.course_id=score_table.course_id 
     LEFT JOIN stu_info ON score_table.stu_id=stu_info.stu_id GROUP BY score_table.stu_id;
    -- 2.查询出每门课程的选修的学生的个数和学生考试的总分
    SELECT course_i.course_name,COUNT(score_table.stu_id),SUM(score_table.score)FROM course_i 
    right JOIN score_table ON course_i.course_id=score_table.course_id 
    LEFT JOIN stu_info ON score_table.stu_id=stu_info.stu_id GROUP BY course_i.course_id;
     
    -- 3.查询出性别一样并且年龄一样的学生的信息
    SELECT s1.* FROM stu_info AS s1 LEFT JOIN stu_info AS s2 
    ON s1.stu_age=s2.stu_age and s1.stu_sex=s2.stu_sex 
    WHERE s1.stu_id!=s2.stu_id;
    -- 4.查询出学分一样的课程信息
    SELECT i1.* FROM course_i as i1 LEFT JOIN course_i as i2 
    ON i1.course_marks=i2.course_marks WHERE i1.course_id!=i2.course_id 
    GROUP BY i1.course_id;
    -- 5.查询出参加了考试的学生的学号,姓名,课程号和分数
    SELECT stu_info.stu_id,stu_info.stu_name,score_table.course_id,score_table.score
    FROM stu_info LEFT JOIN score_table 
    ON stu_info.stu_id=score_table.stu_id;
    -- 6.查询出参加了考试的学生的学号,课程号,课程名,课程学分和分数
    SELECT stu_info.stu_id,stu_info.stu_name,score_table.course_id,
    course_i.course_name,course_i.course_marks,score_table.score
    FROM stu_info LEFT JOIN score_table 
    ON stu_info.stu_id=score_table.stu_id
    LEFT JOIN course_i ON score_table.course_id=course_i.course_id;
    -- 7.查询出没有参加考试的学生的学号和姓名
    SELECT stu_id,stu_name FROM stu_info 
    WHERE stu_id not in (SELECT stu_id FROM score_table);
    -- 8.查询出没有学生选修(即没有学生考试)的课程编号、课程名和学分
    SELECT * FROM course_i WHERE course_id 
    NOT in (SELECT course_id FROM score_table);
    -- 9.查询出姓名中有字母a的学生的信息
    SELECT * FROM stu_info WHERE stu_name LIKE "%a%";
    -- 10.查询出选修了2门课程以上的并且考试平均分在70以上的学生的学号和考试平均分以及选修课程的数量
    SELECT score_table.stu_id,AVG(score_table.score),COUNT(score_table.course_id)
    FROM score_table GROUP BY stu_id HAVING AVG(score_table.score)>70;
    
  • 相关阅读:
    7-1 城市间紧急救援 (25 分)(最短路径:斯特拉算法)
    常见的MD5碰撞
    PHP常见绕过(更新ing)
    7-10 旅游规划 (25 分)
    杂记:用python向网页提交数据
    python学习日记
    NOIP2018提高组金牌训练营——搜索专题
    noip复习之拓扑排序
    NOIP2018提高组金牌训练营——字符串专题
    NOIP2018提高组金牌训练营——数论专题
  • 原文地址:https://www.cnblogs.com/BIG-BOSS-ZC/p/11807349.html
Copyright © 2020-2023  润新知