• 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;
    
  • 相关阅读:
    RabbitMQ详解
    嵌入式开发学习(10)<汇编写启动代码之设置栈、调用c语言、开关看门狗和开关iCache>
    嵌入式开发学习(8)<一步一步点亮LED灯>
    gcc编译神器之makefile
    嵌入式开发学习(6)<S5PV210开发板刷系统那点破事儿之二>
    嵌入式开发学习(5)<S5PV210开发板刷系统那点破事儿之一>
    嵌入式开发学习(4)<ARM汇编指令集详解>
    嵌入式开发学习(3)<ARM汇编指令集语法>
    嵌入式开发学习(2)<S5PV210启动过程详解>
    嵌入式开发学习(1)<ARM体系结构>
  • 原文地址:https://www.cnblogs.com/BIG-BOSS-ZC/p/11807349.html
Copyright © 2020-2023  润新知