• mysql第四次作业


    目录

    数据表介绍

    --1.学生表Student(SId,Sname,Sage,Ssex)--SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别

    --2.课程表Course(CId,Cname,TId)--CId 课程编号,Cname 课程名称,TId 教师编号

    --3.教师表Teacher(TId,Tname)--TId 教师编号,Tname 教师姓名

    --4.成绩表SC(SId,CId,score)--SId 学生编号,CId 课程编号,score 分数

    学生表 Student

    create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10));

    insert into Student values('01' , '赵雷' , '1990-01-01' , '男');

    insert into Student values('02' , '钱电' , '1990-12-21' , '男');

    insert into Student values('03' , '孙风' , '1990-12-20' , '男');

    insert into Student values('04' , '李云' , '1990-12-06' , '男');

    insert into Student values('05' , '周梅' , '1991-12-01' , '女');

    insert into Student values('06' , '吴兰' , '1992-01-01' , '女');

    insert into Student values('07' , '郑竹' , '1989-01-01' , '女');

    insert into Student values('09' , '张三' , '2017-12-20' , '女');

    insert into Student values('10' , '李四' , '2017-12-25' , '女');

    insert into Student values('11' , '李四' , '2012-06-06' , '女');

    insert into Student values('12' , '赵六' , '2013-06-13' , '女');

    insert into Student values('13' , '孙七' , '2014-06-01' , '女');

    科目表 Course

    create table Course(CId varchar(10),Cname nvarchar(10),TId varchar(10));

    insert into Course values('01' , '语文' , '02');

    insert into Course values('02' , '数学' , '01');

    insert into Course values('03' , '英语' , '03');

    教师表 Teacher

    create table Teacher(TId varchar(10),Tname varchar(10));

    insert into Teacher values('01' , '张三');

    insert into Teacher values('02' , '李四');

    insert into Teacher values('03' , '王五');

    成绩表 SC

    create table SC(SId varchar(10),CId varchar(10),score decimal(18,1));

    insert into SC values('01' , '01' , 80);

    insert into SC values('01' , '02' , 90);

    insert into SC values('01' , '03' , 99);

    insert into SC values('02' , '01' , 70);

    insert into SC values('02' , '02' , 60);

    insert into SC values('02' , '03' , 80);

    insert into SC values('03' , '01' , 80);

    insert into SC values('03' , '02' , 80);

    insert into SC values('03' , '03' , 80);

    insert into SC values('04' , '01' , 50);

    insert into SC values('04' , '02' , 30);

    insert into SC values('04' , '03' , 20);

    insert into SC values('05' , '01' , 76);

    insert into SC values('05' , '02' , 87);

    insert into SC values('06' , '01' , 31);

    insert into SC values('06' , '03' , 34);

    insert into SC values('07' , '02' , 89);

    insert into SC values('07' , '03' , 98);


    1. 查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数

      1. 查询同时存在" 01 "课程和" 02 "课程的情况
    1. mysql> select * from (select * from sc where CId=01) as t1 inner join ( select * from sc where CId=02) as t2 on t1.SId=t2.SId;
    2. +------+------+-------+------+------+-------+
    3. | SId  | CId  | score | SId  | CId  | score |
    4. +------+------+-------+------+------+-------+
    5. | 01   | 01   |  80.0 | 01   | 02   |  90.0 |
    6. | 02   | 01   |  70.0 | 02   | 02   |  60.0 |
    7. | 03   | 01   |  80.0 | 03   | 02   |  80.0 |
    8. | 04   | 01   |  50.0 | 04   | 02   |  30.0 |
    9. | 05   | 01   |  76.0 | 05   | 02   |  87.0 |
    10. +------+------+-------+------+------+-------+
    11. 5 rows in set (0.00 sec)
      1. 查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )
    1. mysql> select * from (select * from sc where CId=01) as t1 left outer join ( select * from sc where CId=02) as t2 on t1.SId=t2.SId;
    2. +------+------+-------+------+------+-------+
    3. | SId  | CId  | score | SId  | CId  | score |
    4. +------+------+-------+------+------+-------+
    5. | 01   | 01   |  80.0 | 01   | 02   |  90.0 |
    6. | 02   | 01   |  70.0 | 02   | 02   |  60.0 |
    7. | 03   | 01   |  80.0 | 03   | 02   |  80.0 |
    8. | 04   | 01   |  50.0 | 04   | 02   |  30.0 |
    9. | 05   | 01   |  76.0 | 05   | 02   |  87.0 |
    10. | 06   | 01   |  31.0 | NULL | NULLNULL |
    11. +------+------+-------+------+------+-------+
    12. 6 rows in set (0.00 sec)
      1. 查询不存在" 01 "课程但存在" 02 "课程的情况
    1. mysql> select * from (select * from sc where CId=01) as t1 right outer join ( select * from sc where CId=02) as t2 on t1.SId=t2.SId where t1.CId is null;
    2. +------+------+-------+------+------+-------+
    3. | SId  | CId  | score | SId  | CId  | score |
    4. +------+------+-------+------+------+-------+
    5. | NULL | NULLNULL | 07   | 02   |  89.0 |
    6. +------+------+-------+------+------+-------+
    7. 1 row in set (0.00 sec)

    1. 查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
    1. mysql> select * from ( select SId,avg(score) from sc group by SId having avg(score)>=60) as t1 inner join (select Sname,SId from student) as t2 on t2.SId=t1.SId;
    2. +------+------------+--------+-----+
    3. | SId  | avg(score) | Sname  | SId |
    4. +------+------------+--------+-----+
    5. | 01   |   89.66667 | 赵雷   | 01  |
    6. | 02   |   70.00000 | 钱电   | 02  |
    7. | 03   |   80.00000 | 孙风   | 03  |
    8. | 05   |   81.50000 | 周梅   | 05  |
    9. | 07   |   93.50000 | 郑竹   | 07  |
    10. +------+------------+--------+-----+
    11. 5 rows in set (0.00 sec)
    1. 查询在 SC 表存在成绩的学生信息
    1. mysql> select * from student right outer join sc on student.SId=sc.SId;
    2. +------+--------+---------------------+------+------+------+-------+
    3. | SId  | Sname  | Sage                | Ssex | SId  | CId  | score |
    4. +------+--------+---------------------+------+------+------+-------+
    5. | 01   | 赵雷   | 1990-01-01 00:00:00 | 男   | 01   | 01   |  80.0 |
    6. | 01   | 赵雷   | 1990-01-01 00:00:00 | 男   | 01   | 02   |  90.0 |
    7. | 01   | 赵雷   | 1990-01-01 00:00:00 | 男   | 01   | 03   |  99.0 |
    8. | 02   | 钱电   | 1990-12-21 00:00:00 | 男   | 02   | 01   |  70.0 |
    9. | 02   | 钱电   | 1990-12-21 00:00:00 | 男   | 02   | 02   |  60.0 |
    10. | 02   | 钱电   | 1990-12-21 00:00:00 | 男   | 02   | 03   |  80.0 |
    11. | 03   | 孙风   | 1990-12-20 00:00:00 | 男   | 03   | 01   |  80.0 |
    12. | 03   | 孙风   | 1990-12-20 00:00:00 | 男   | 03   | 02   |  80.0 |
    13. | 03   | 孙风   | 1990-12-20 00:00:00 | 男   | 03   | 03   |  80.0 |
    14. | 04   | 李云   | 1990-12-06 00:00:00 | 男   | 04   | 01   |  50.0 |
    15. | 04   | 李云   | 1990-12-06 00:00:00 | 男   | 04   | 02   |  30.0 |
    16. | 04   | 李云   | 1990-12-06 00:00:00 | 男   | 04   | 03   |  20.0 |
    17. | 05   | 周梅   | 1991-12-01 00:00:00 | 女   | 05   | 01   |  76.0 |
    18. | 05   | 周梅   | 1991-12-01 00:00:00 | 女   | 05   | 02   |  87.0 |
    19. | 06   | 吴兰   | 1992-01-01 00:00:00 | 女   | 06   | 01   |  31.0 |
    20. | 06   | 吴兰   | 1992-01-01 00:00:00 | 女   | 06   | 03   |  34.0 |
    21. | 07   | 郑竹   | 1989-01-01 00:00:00 | 女   | 07   | 02   |  89.0 |
    22. | 07   | 郑竹   | 1989-01-01 00:00:00 | 女   | 07   | 03   |  98.0 |
    23. +------+--------+---------------------+------+------+------+-------+
    24. 18 rows in set (0.00 sec)

    1. 查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null )
    1. mysql> select * from (select SId,Sname from student) as t1 left outer join ( select SId,count(CId),sum(score) from sc group by SId) as t2 on t1.SId=t2.SId;
    2. +-----+--------+------+------------+------------+
    3. | SId | Sname  | SId  | count(CId) | sum(score) |
    4. +-----+--------+------+------------+------------+
    5. | 01  | 赵雷   | 01   |          3 |      269.0 |
    6. | 02  | 钱电   | 02   |          3 |      210.0 |
    7. | 03  | 孙风   | 03   |          3 |      240.0 |
    8. | 04  | 李云   | 04   |          3 |      100.0 |
    9. | 05  | 周梅   | 05   |          2 |      163.0 |
    10. | 06  | 吴兰   | 06   |          2 |       65.0 |
    11. | 07  | 郑竹   | 07   |          2 |      187.0 |
    12. | 09  | 张三   | NULL |       NULL |       NULL |
    13. | 10  | 李四   | NULL |       NULL |       NULL |
    14. | 11  | 李四   | NULL |       NULL |       NULL |
    15. | 12  | 赵六   | NULL |       NULL |       NULL |
    16. | 13  | 孙七   | NULL |       NULL |       NULL |
    17. +-----+--------+------+------------+------------+
    18. 12 rows in set (0.00 sec)

    4.1 查有成绩的学生信息

    1. mysql> select * from student right outer join sc on student.SId=sc.SId;
    2. +------+--------+---------------------+------+------+------+-------+
    3. | SId  | Sname  | Sage                | Ssex | SId  | CId  | score |
    4. +------+--------+---------------------+------+------+------+-------+
    5. | 01   | 赵雷   | 1990-01-01 00:00:00 | 男   | 01   | 01   |  80.0 |
    6. | 01   | 赵雷   | 1990-01-01 00:00:00 | 男   | 01   | 02   |  90.0 |
    7. | 01   | 赵雷   | 1990-01-01 00:00:00 | 男   | 01   | 03   |  99.0 |
    8. | 02   | 钱电   | 1990-12-21 00:00:00 | 男   | 02   | 01   |  70.0 |
    9. | 02   | 钱电   | 1990-12-21 00:00:00 | 男   | 02   | 02   |  60.0 |
    10. | 02   | 钱电   | 1990-12-21 00:00:00 | 男   | 02   | 03   |  80.0 |
    11. | 03   | 孙风   | 1990-12-20 00:00:00 | 男   | 03   | 01   |  80.0 |
    12. | 03   | 孙风   | 1990-12-20 00:00:00 | 男   | 03   | 02   |  80.0 |
    13. | 03   | 孙风   | 1990-12-20 00:00:00 | 男   | 03   | 03   |  80.0 |
    14. | 04   | 李云   | 1990-12-06 00:00:00 | 男   | 04   | 01   |  50.0 |
    15. | 04   | 李云   | 1990-12-06 00:00:00 | 男   | 04   | 02   |  30.0 |
    16. | 04   | 李云   | 1990-12-06 00:00:00 | 男   | 04   | 03   |  20.0 |
    17. | 05   | 周梅   | 1991-12-01 00:00:00 | 女   | 05   | 01   |  76.0 |
    18. | 05   | 周梅   | 1991-12-01 00:00:00 | 女   | 05   | 02   |  87.0 |
    19. | 06   | 吴兰   | 1992-01-01 00:00:00 | 女   | 06   | 01   |  31.0 |
    20. | 06   | 吴兰   | 1992-01-01 00:00:00 | 女   | 06   | 03   |  34.0 |
    21. | 07   | 郑竹   | 1989-01-01 00:00:00 | 女   | 07   | 02   |  89.0 |
    22. | 07   | 郑竹   | 1989-01-01 00:00:00 | 女   | 07   | 03   |  98.0 |
    23. +------+--------+---------------------+------+------+------+-------+
    24. 18 rows in set (0.00 sec)
    1. 查询「李」姓老师的数量
    1. mysql> select count(1) from teacher where Tname like "李%";
    2. +----------+
    3. | count(1) |
    4. +----------+
    5. |        1 |
    6. +----------+
    7. 1 row in set (0.00 sec)

    1. 查询学过「张三」老师授课的同学的信息
    1. mysql> select * from student where SId in (select SId from sc where CId=( select CId from course where TId=(select TId from teacher where Tname = "张三")));
    2. +-----+--------+---------------------+------+
    3. | SId | Sname  | Sage                | Ssex |
    4. +-----+--------+---------------------+------+
    5. | 01  | 赵雷   | 1990-01-01 00:00:00 | 男   |
    6. | 02  | 钱电   | 1990-12-21 00:00:00 | 男   |
    7. | 03  | 孙风   | 1990-12-20 00:00:00 | 男   |
    8. | 04  | 李云   | 1990-12-06 00:00:00 | 男   |
    9. | 05  | 周梅   | 1991-12-01 00:00:00 | 女   |
    10. | 07  | 郑竹   | 1989-01-01 00:00:00 | 女   |
    11. +-----+--------+---------------------+------+
    12. 6 rows in set (0.00 sec)
    1. 查询没有学全所有课程的同学的信息
    1. mysql> select * from student where SId in (select SId from sc group by SId having count(CId) !=( select count(1) from course));
    2. +-----+--------+---------------------+------+
    3. | SId | Sname | Sage | Ssex |
    4. +-----+--------+---------------------+------+
    5. | 05 | 周梅 | 1991-12-01 00:00:00 | 女 |
    6. | 06 | 吴兰 | 1992-01-01 00:00:00 | 女 |
    7. | 07 | 郑竹 | 1989-01-01 00:00:00 | 女 |
    8. +-----+--------+---------------------+------+
    9. 3 rows in set (0.01 sec)
    1. 查询至少有一门课与学号为" 01 "的同学所学相同的同学的信
    1. mysql> select * from student where SId in (select SId from sc where CId in ( select CId from sc where SId=01) group by SId) limit 1,6;
    2. +-----+--------+---------------------+------+
    3. | SId | Sname | Sage | Ssex |
    4. +-----+--------+---------------------+------+
    5. | 02 | 钱电 | 1990-12-21 00:00:00 | 男 |
    6. | 03 | 孙风 | 1990-12-20 00:00:00 | 男 |
    7. | 04 | 李云 | 1990-12-06 00:00:00 | 男 |
    8. | 05 | 周梅 | 1991-12-01 00:00:00 | 女 |
    9. | 06 | 吴兰 | 1992-01-01 00:00:00 | 女 |
    10. | 07 | 郑竹 | 1989-01-01 00:00:00 | 女 |
    11. +-----+--------+---------------------+------+
    12. 6 rows in set (0.00 sec)
    1. 查询和" 01 "号的同学学习的课程 完全相同的其他同学的信息
    1. mysql> select * from student where SId in ( select SId from sc where CId in (select CId from sc where SId=01) group by SId having count(CId)=(select count(CId) from sc where SId=01));
    2. +-----+--------+---------------------+------+
    3. | SId | Sname | Sage | Ssex |
    4. +-----+--------+---------------------+------+
    5. | 01 | 赵雷 | 1990-01-01 00:00:00 | 男 |
    6. | 02 | 钱电 | 1990-12-21 00:00:00 | 男 |
    7. | 03 | 孙风 | 1990-12-20 00:00:00 | 男 |
    8. | 04 | 李云 | 1990-12-06 00:00:00 | 男 |
    9. +-----+--------+---------------------+------+
    10. 4 rows in set (0.00 sec)
    1. 查询没学过"张三"老师讲授的任一门课程的学生姓名
    1. mysql> select * from student where SId=(select t1.SId from (select SId from sc group by SId) as t1 left outer join ( select SId from sc where CId = (select CId from course where TId in (select TId from teacher where Tname="张三"))) as t2 on t1.SId=t2.SId where t2.SId <=>null);
    2. +-----+--------+---------------------+------+
    3. | SId | Sname | Sage | Ssex |
    4. +-----+--------+---------------------+------+
    5. | 06 | 吴兰 | 1992-01-01 00:00:00 | 女 |
    6. +-----+--------+---------------------+------+
    7. 1 row in set (0.00 sec)
    1. 查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
    1. mysql> select * from (select SId from student) as t1 inner join (select SId,avg(score) from sc where score < 60 group by SId having count(CId)>=2) as t2 on t1.SId=t2.SId;
    2. +-----+------+------------+
    3. | SId | SId  | avg(score) |
    4. +-----+------+------------+
    5. | 04  | 04   |   33.33333 |
    6. | 06  | 06   |   32.50000 |
    7. +-----+------+------------+
    8. 2 rows in set (0.00 sec)

    1. 检索" 01 "课程分数小于 60,按分数降序排列的学生信息
    1. mysql> select * from student inner join (select * from sc where CId=01 and score <60 order by score desc) as t2 on student.SId=t2.SId;
    2. +-----+--------+---------------------+------+------+------+-------+
    3. | SId | Sname  | Sage                | Ssex | SId  | CId  | score |
    4. +-----+--------+---------------------+------+------+------+-------+
    5. | 04  | 李云   | 1990-12-06 00:00:00 | 男   | 04   | 01   |  50.0 |
    6. | 06  | 吴兰   | 1992-01-01 00:00:00 | 女   | 06   | 01   |  31.0 |
    7. +-----+--------+---------------------+------+------+------+-------+
    8. 2 rows in set (0.00 sec)
    1. 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
    1. mysql> select * from (select SId,avg(score) from sc group by SId order by avg(score) desc) as t1 left outer join sc on sc.SId=t1.SId;
    2. +------+------------+------+------+-------+
    3. | SId  | avg(score) | SId  | CId  | score |
    4. +------+------------+------+------+-------+
    5. | 07   |   93.50000 | 07   | 02   |  89.0 |
    6. | 07   |   93.50000 | 07   | 03   |  98.0 |
    7. | 01   |   89.66667 | 01   | 01   |  80.0 |
    8. | 01   |   89.66667 | 01   | 02   |  90.0 |
    9. | 01   |   89.66667 | 01   | 03   |  99.0 |
    10. | 05   |   81.50000 | 05   | 01   |  76.0 |
    11. | 05   |   81.50000 | 05   | 02   |  87.0 |
    12. | 03   |   80.00000 | 03   | 01   |  80.0 |
    13. | 03   |   80.00000 | 03   | 02   |  80.0 |
    14. | 03   |   80.00000 | 03   | 03   |  80.0 |
    15. | 02   |   70.00000 | 02   | 01   |  70.0 |
    16. | 02   |   70.00000 | 02   | 02   |  60.0 |
    17. | 02   |   70.00000 | 02   | 03   |  80.0 |
    18. | 04   |   33.33333 | 04   | 01   |  50.0 |
    19. | 04   |   33.33333 | 04   | 02   |  30.0 |
    20. | 04   |   33.33333 | 04   | 03   |  20.0 |
    21. | 06   |   32.50000 | 06   | 01   |  31.0 |
    22. | 06   |   32.50000 | 06   | 03   |  34.0 |
    23. +------+------------+------+------+-------+
    24. 18 rows in set (0.00 sec)

  • 相关阅读:
    模因币——在加密寒冬中逆流而上
    vue使用xlsx、xlsx-style和fileSaver导出excel表格
    k线图形态这样记(口诀篇)
    【工具免费】喜马拉雅 x2m转m4a,xm转mp3的简单方法!
    我好像找到了点学习英文的技巧
    MyBatis resultMap元素
    求职简历的书写技巧
    Ompal138+Spartan-6 FPGA开发板规格软硬件资料数据手册
    探究大语言模型如何使用长上下文
    《一个程序猿的生命周期》-《发展篇》- 44.再次进军内蒙市场(转型)
  • 原文地址:https://blog.csdn.net/weixin_68608008/article/details/134032094