• mysql——面试题初体验


    查询环境

    1、student(学生表)

    2、课程表(course)

    3、教师表(teacher)

    4、成绩表(score)

    问题

    (1) 查询所有学生的学号、姓名、选课数、总成绩

    mysql> select s.s_id as 学号,s.s_name as 姓名 from student as s;

    +--------+--------+
    | 学号   | 姓名   |
    +--------+--------+
    |      1 | 张三   |
    |      2 | 张三   |
    |      3 | 张四   |
    |      4 | 张五   |
    +--------+--------+
    4 rows in set (0.00 sec)

    mysql> select sc.s_id,sum(s_score) as scoresum ,count(c_id) as coursenumber from score as sc group by sc.s_id;

    +------+----------+--------------+
    | s_id | scoresum | coursenumber |
    +------+----------+--------------+
    |    1 |      141 |            3 |
    |    2 |      112 |            3 |
    |    3 |      217 |            3 |
    |    4 |      151 |            3 |
    +------+----------+--------------+
    4 rows in set (0.00 sec)

    把上面的两个表再关联查询

    mysql> select s.s_id as 学号,s.s_name as 姓名,d.scoresum as 总成绩,d.coursenumber as 选课数 from student as s,
        -> (select sc.s_id,sum(s_score) as scoresum ,count(c_id) as coursenumber from score as sc group by sc.s_id) as d
        -> where s.s_id=d.s_id;


    +--------+--------+-----------+-----------+
    | 学号   | 姓名   |   总成绩 | 选课数    |
    +--------+--------+-----------+-----------+
    |      1 | 张三   |       141 |         3 |
    |      2 | 张三   |       112 |         3 |
    |      3 | 张四   |       217 |         3 |
    |      4 | 张五   |       151 |         3 |
    +--------+--------+-----------+-----------+
    4 rows in set (0.00 sec)


    (2) 查询学过“数学”老师所教的所有课的同学的学号、姓名

    mysql> select s_id, s_name from student where s_id in (select s_id from score where c_id in (select c_id from course where t_id = (select t_id from teacher where t_name = "数学老师")));

    +------+--------+
    | s_id | s_name |
    +------+--------+
    |    1 | 张三   |
    |    3 | 张四   |
    |    2 | 张三   |
    |    4 | 张五   |
    +------+--------+
    4 rows in set (0.00 sec)


    (3) 查询和“1”号的同学学习的课程完全相同的其他同学学号和姓名

    ①从成绩表查询1号选的课

    mysql> select score.c_id from score
        -> where score.s_id=1;

    +------+
    | c_id |
    +------+
    |    1 |
    |    2 |
    |    3 |
    +------+
    3 rows in set (0.00 sec)

    ②从成绩表查询所有同学的s_id

    mysql> select sc.s_id from score as sc
        -> where sc.c_id in(
        -> select score.c_id from score
        -> where score.s_id=1);

    +------+
    | s_id |
    +------+
    |    1 |
    |    3 |
    |    2 |
    |    4 |
    |    2 |
    |    3 |
    |    1 |
    |    4 |
    |    4 |
    |    3 |
    |    2 |
    |    1 |
    +------+

    12 rows in set (0.00 sec)

    ③从student表查询所有学生信息

    mysql> select * from student
        -> where student.s_id in
        -> (select sc.s_id from score as sc
        -> where sc.c_id in(
        -> select score.c_id from score
        -> where score.s_id=1)
        -> );

    +------+--------+---------+-------+
    | s_id | s_name | s_birth | s_sex |
    +------+--------+---------+-------+
    |    1 | 张三   |      10 | 男    |
    |    2 | 张三   |      11 | 男    |
    |    3 | 张四   |       1 | 男    |
    |    4 | 张五   |      12 | 女    |
    +------+--------+---------+-------+
    4 rows in set (0.00 sec)

    第③次就查询到了和“1”号的同学学习的课程完全相同的其他同学学号和姓名

    (4)按平均成绩从高到低显示所有学生的“数学”(c_id=1)、“语文”(c_id=2) 、英语”(c_id=3)三门的课程成绩,按如下形式显示:学生ID,数学,语文,英语,有效课程数,有效平均分

    ①查询有效平均分

    mysql> select s_id as 学号,avg(s_score) as 有效平均分 from score group by s_id order by 有效平均分 desc;

    +--------+-----------------+
    | 学号   | 有效平均分      |
    +--------+-----------------+
    |      3 |         72.3333 |
    |      4 |         50.3333 |
    |      1 |         47.0000 |
    |      2 |         37.3333 |
    +--------+-----------------+
    4 rows in set (0.00 sec)

    以下为参考案例

    mysql> select *  from score
        -> left join(
        -> select s_id,avg(s_score) as avscore from score
        -> group by s_id
        -> )as d
        -> on score.s_id=d.s_id
        -> order by avscore desc;


    +------+------+---------+------+---------+
    | s_id | c_id | s_score | s_id | avscore |
    +------+------+---------+------+---------+
    |    3 |    3 |      88 |    3 | 72.3333 |
    |    3 |    2 |      65 |    3 | 72.3333 |
    |    3 |    1 |      64 |    3 | 72.3333 |
    |    4 |    1 |      78 |    4 | 50.3333 |
    |    4 |    2 |      65 |    4 | 50.3333 |
    |    4 |    3 |       8 |    4 | 50.3333 |
    |    1 |    1 |      24 |    1 | 47.0000 |
    |    1 |    3 |      91 |    1 | 47.0000 |
    |    1 |    2 |      26 |    1 | 47.0000 |
    |    2 |    2 |      25 |    2 | 37.3333 |
    |    2 |    3 |       9 |    2 | 37.3333 |
    |    2 |    1 |      78 |    2 | 37.3333 |
    +------+------+---------+------+---------+
    12 rows in set (0.00 sec)
     


    (5) 使用分段[100-85],[85-70],[70-60],[<60]来统计各科成绩,分别统计各分数段人数:课程ID和课程名称

  • 相关阅读:
    Zabbix邮箱报警
    微信支付 APP端 后端 第一弹 微信下单
    熊孩子说“你没看过奥特曼”,赶紧用Python学习一下,没想到
    一种KV存储的GC优化实践
    9.8 段错误,虚拟内存,内存映射 CSAPP
    SpringBoot进制转换规则问题
    Android自定义View之点赞撒花(三阶贝塞尔曲线应用)
    关于红包雨功能的探索
    2022年C等级考试九月二级真题B:全在其中
    判断日期区间或季节等
  • 原文地址:https://blog.csdn.net/m0_64352136/article/details/133855137