zoukankan      html  css  js  c++  java
  • 习题

    创建表, 关联表, 插入数据

    # 创建班级表, 插入数据
    create table class (
        class_id int auto_increment primary key,
        caption varchar(32) not null default ""
        ) charset utf8;
    insert into class (caption) values 
    ("三年二班"), ("一年三班"), ("三年一班");    
    
    # 创建学生表, 使用外键关联班级表, 插入数据
    create table student (
        student_id int auto_increment primary key,
        sname varchar(32) not null default "",
        gender varchar(32) not null default "",
        class_id int,
        constraint fk_cls_id foreign key (class_id)
        references class (class_id)
        ) charset utf8;
    insert into student (sname, gender, class_id) values
    ("钢蛋", "女", 1), ("铁锤", "男", 1), ("山炮", "男", 2);
    
    # 创建老师表, 插入数据   
    create table teacher (
        t_id int auto_increment primary key,
        t_name varchar(32) not null default ""
        ) charset utf8;
    insert into teacher (t_name) values
    ("波多"), ("苍井"), ("饭岛");
    
    # 创建课程表, 使用外键关联老师表, 插入数据
    create table course (
        course_id int auto_increment primary key,
        cname varchar(32) not null default "",
        teacher_id int,
        constraint fk_tea_id foreign key (teacher_id)
        references teacher (t_id)
        ) charset utf8;
    insert into course (cname, teacher_id) values
    ("生物", 1), ("体育", 1), ("物理", 2);
    
    # 创建成绩表, 使用两个外键分别关联学生表和课程表, 插入数据
    create table score (
        score_id int auto_increment primary key,
        student_id int not null default 0,
        course_id int not null default 0,
        number int not null default 0,
        
        constraint fk_sco_stu foreign key (student_id)
        references student (student_id),
        
        constraint fk_sco_cou foreign key (course_id)
        references course (course_id)
        ) charset utf8;
    insert into score (student_id, course_id, number) values
    (1, 1, 60), (1, 2, 59), (2, 2, 100);    
    

    操作表

    1. 查询所有大于60分的学生的姓名和学号 (DISTINCT: 去重)

      select distinct student.sname, student.student_id
      from student left join score
      on student.student_id = score.student_id 
      where score.number > 60;
      
      # 注意1: 去重的关键字distinct只写一次
      # 注意2: 查询的关键字模糊时加表名, 例如student.student_id
      
    2. 查询每个老师教授的课程数量和老师信息

      select teacher.*, count(course.teacher_id) as course_amount 
      from teacher left join course 
      on teacher.t_id = course.teacher_id
      group by teacher.t_id;
      +------+--------+---------------+
      | t_id | t_name | course_amount |
      +------+--------+---------------+
      |    1 | 波多   |             2 |
      |    2 | 苍井   |             1 |
      |    3 | 饭岛   |             0 |
      +------+--------+---------------+
      
      # 注意: 联结表中分组的字段属于哪个表, 就只能查询这个表的字段, 不包含分组的字段的表的字段只能通过聚合函数进行统计
      
    3. 查询学生信息以及学生所在的班级信息

      select student.*, class.caption from student left join class
      on student.class_id = class.class_id;
      
    4. 学生中男生的个数和女生的个数

      select gender, count(gender) as amount from student group by gender;  # student.* 表示student表中的所有字段
      
    5. 获取所有学习'生物'的学生的学号和成绩;姓名

      select student.student_id, score.number, student.sname
      from student left join score
      on student.student_id = score.student_id
      left join course
      on score.course_id = course.course_id
      where course.cname = "生物";
      
    6. 查询姓“波”的老师的个数

      select count(t_name) as Li_amount from teacher where t_name like "波%";
      
    7. 查询课程成绩小于60分的同学的学号、姓名

      select student.student_id, sname from student left join score
      on student.student_id = score.student_id
      where score.number < 60;
      
    8. 删除学习“波多”老师课的score表记录

      delete from score
      where course_id in (  # 嵌套子查询
          select course.course_id from course
      left join teacher 
      on course.teacher_id = teacher.t_id
      where t_name = "波多"
          );
      
    9. 查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分

      select course_id, max(number), min(number) from score group by course_id;
      
    10. 查询每门课程被选修的学生数

      select course_id, count(student_id) from score group by course_id;
      
    11. 查询姓“钢”的学生名单

      select * from student where sname like "钢%";
      
    12. 查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

      select course_id, avg(number) as average from score
      group by course_id
      order by average, course_id desc;
      
    13. 查询平均成绩大于85的所有学生的学号、姓名和平均成绩

      select student.student_id, sname, avg(number) as average from student left join score
      on student.student_id = score.student_id
      group by student.student_id
      having average > 60;  # 对分组统计结果进行二次筛选
      
    14. 查询课程编号为2且课程成绩 >= 59 的学生的学号和姓名

      select student.student_id, sname from student left join score
      on student.student_id = score.student_id
      where score.course_id = 2 and number >= 59;
      
    15. 查询各个课程及相应的选修人数

      select course_id, count(student_id) as stu_amount from score 
      group by course_id;
      
    16. 查询“2”课程分数小于60,按分数降序排列的同学学号

      select student_id from score 
      where course_id = 2 and number < 60;
      
    17. 删除学号为“2”的同学的“2”课程的成绩

      delete from score where student_id = 2 and course_id = 2;
      
  • 相关阅读:
    selenium 笔记 二次封装
    app测试点(转)
    git的使用
    ssm框架拦截器设置 & 改变数据库表结构 & JavaWeb出现Invalid bound statement (not found)
    mysql 错 Could not open JDBC Connection for transaction; nested exception is java.sql.SQLExceptio
    waitpid 中 的最后一个参数使用 WNOHANG && read和recv函数区别
    Ubuntu上安装make命令并使用makefile文件简化操作
    Ubuntu安装httpd(apache)及相关配置文件的作用
    QMYSQL driver not loaded 的解决办法 和 QDomDocument::setContent()
    操作系统知识点《一》
  • 原文地址:https://www.cnblogs.com/-406454833/p/11789534.html
Copyright © 2011-2022 走看看