zoukankan      html  css  js  c++  java
  • 多表查询(使用连接和外键) 示例

    create table class(cid int primary key auto_increment,
                      caption char(4) not null)charset utf8;
                      
    create table teacher(tid int primary key auto_increment,
                        tname varchar(32) not null)charset utf8;
                        
    create table student(sid int primary key auto_increment,
                        sname varchar(32) not null,
                        gender enum('male','female','others') not null default 'male',
                        class_id int,
                        foreign key(class_id) references class(cid)
                        on update cascade
                        on delete cascade) charset utf8;
     
    create table course(cid int primary key auto_increment,
                       cname varchar(16) not null,
                       teacher_id int,
                       foreign key(teacher_id) references teacher(tid)
                       on update cascade
                       on delete cascade) charset utf8;
                       
    create table score(sid int primary key auto_increment,
                      student_id int,
                      course_id int,
                      number int(3) not null,
                      foreign key(student_id) references student(sid)
                       on update cascade
                       on delete cascade,
                       foreign key(course_id) references course(cid)
                       on update cascade
                       on delete cascade) charset utf8;
                       
    insert into class(caption) values('三年二班'),('一年三班'),('三年一班');
    insert into teacher(tname) values('波多'),('苍空'),('饭岛');
    insert into student(sname,gender,class_id) values('钢蛋','female',1),('铁锤','female',1),('山炮','male',2);
    insert into course(cname,teacher_id) values('生物',1),('体育',1),('物理',2);
    insert into score(student_id,course_id,number) values(1,1,60),(1,2,59),(2,2,100);
    
    
    1. 查询所有大于60分的学生的姓名和学号  (DISTINCT: 去重)
    select  distinct student.sid,sname from student where student.sid in (select student_id from score where number>60);
    
    2.查询每个老师教授的课程数量 和 老师信息#################
    select tid,count(cname) from teacher left join course on teacher.tid=course.teacher_id group by teacher.tid;
    
    3. 查询学生的信息以及学生所在的班级信息
    select sid,sname,gender,caption from student left join class on student.class_id=class.cid;
    
    4、学生中男生的个数和女生的个数
    select gender,count(gender) from student group by gender;
    
    5、获取所有学习'生物'的学生的学号和成绩;姓名
    select student.sid,student.sname,score.number from student left join score on student.sid=score.student_id where score.course_id=(select cid from course where cname='生物');
      
    6、查询平均成绩大于60分的同学的学号和平均成绩; 
    select student_id,avg(number) from score group by student_id having avg(number)>60; 
    
    7、查询姓“李”的老师的个数;
    select count(tname) from teacher where tname like '李%';
    8、查询课程成绩小于60分的同学的学号、姓名;
    select student.sid,student.sname from student where student.sid in(select student_id from score where number<60);
    9. 删除学习“叶平”老师课的SC表记录
    delete from score where course_id in (select course.cid from course where teacher_id=(select teacher.tid from teacher where tname='叶平'));
    
    10.查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分;
    select course.cid,max(number),min(number) from course left join score on course.cid=score.course_id group by course.cid;
    11.查询每门课程被选修的学生数
    select course_id,count(student_id) from score group by course_id;
    12.查询姓“张”的学生名单;
    select sname from student where sname like '张%';
    
    13.查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列
    select course_id,avg(number) from score where course_id in (select course.cid from course) group by course_id order by avg(number) asc,course_id desc;
    14.查询平均成绩大于85的所有学生的学号、姓名和平均成绩 ####################
    select student.sid,student.sname,avg(number) from student left join score on student.sid=score.student_id group by student.sid having avg(number)>85;
    15.查询课程编号为3且课程成绩在80分以上的学生的学号和姓名;
    select student_id,student.sname from student left join score on score.student_id=student.sid where score.course_id=3 and number>80; 
    16.查询各个课程及相应的选修人数
    select course.cname,count(student_id) from course left join score on course.cid=score.course_id group by course.cname;
    17.查询“4”课程分数小于60,按分数降序排列的同学学号
    select student_id from score where course_id=4 and number<60 order by number desc;
    18.删除学号为“2”的同学的“1”课程的成绩
    delete from score where student_id=2 and course_id=1;
    
    
  • 相关阅读:
    heat模板
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode819.Most Common Word最常见的单词
    Leetcode819.Most Common Word最常见的单词
    Leetcode783.Minimum Distance Between BST Nodes二叉搜索树结点最小距离
  • 原文地址:https://www.cnblogs.com/zhangchaocoming/p/11769029.html
Copyright © 2011-2022 走看看