#--------------------------------------------------------------------------------------------------
MYSQL
#班级信息表 create table tb_class( id bigint(20) not null auto_increment, class_no varchar(40) not null comment '班级', st_no varchar(40) not null comment '学生号', name varchar(40) not null comment '学生姓名', crdate timestamp not null default current_timestamp on update current_timestamp, primary key (id) )engine=innodb auto_increment=1 default charset=utf8 comment='班级信息表' select * from tb_class; insert into tb_class(class_no,st_no,name) values('c1','st1','sam'); insert into tb_class(class_no,st_no,name) values('c1','st2','lucy'); insert into tb_class(class_no,st_no,name) values('c2','st3','jean'); insert into tb_class(class_no,st_no,name) values('c2','st4','lock'); insert into tb_class(class_no,st_no,name) values('c2','st5','lily'); #-------------------------------------------------------------------------------------------------- #成绩表 create table tb_score( id bigint(20) not null auto_increment, st_no varchar(40) not null comment '学生号', subject_no varchar(40) not null comment '课程编号', score decimal(10) not null comment '成绩', crdate timestamp not null default current_timestamp on update current_timestamp, primary key (id) )engine=innodb auto_increment=1 default charset=utf8 comment='成绩表' select * from tb_score; insert into tb_score(st_no,subject_no,score) values('st1','1',72); insert into tb_score(st_no,subject_no,score) values('st1','2',89); insert into tb_score(st_no,subject_no,score) values('st1','3',78); insert into tb_score(st_no,subject_no,score) values('st2','1',55); insert into tb_score(st_no,subject_no,score) values('st2','2',82); insert into tb_score(st_no,subject_no,score) values('st2','3',93); insert into tb_score(st_no,subject_no,score) values('st3','1',87); insert into tb_score(st_no,subject_no,score) values('st3','3',89); insert into tb_score(st_no,subject_no,score) values('st4','1',98); insert into tb_score(st_no,subject_no,score) values('st4','2',94); insert into tb_score(st_no,subject_no,score) values('st5','2',63); insert into tb_score(st_no,subject_no,score) values('st5','3',90); #-------------------------------------------------------------------------------------------------- #课程表 create table tb_subject( id bigint(20) not null auto_increment, subject_no varchar(40) not null comment '课程编号', subject_name varchar(40) not null comment '课程名称', crdate timestamp not null default current_timestamp on update current_timestamp, primary key (id) )engine=innodb auto_increment=1 default charset=utf8 comment='课程表' select * from tb_subject; insert into tb_subject(subject_no,subject_name) values(1,'语文'); insert into tb_subject(subject_no,subject_name) values(2,'数学'); insert into tb_subject(subject_no,subject_name) values(3,'英语'); #-------------------------------------------------------------------------------------------------- #成绩信息展示 select c.name,c.class_no,su.subject_name,s.score from tb_class c right join tb_score s on c.st_no=s.st_no right join tb_subject su on s.subject_no=su.subject_no order by c.class_no;
#1.(查询每个班级各科成绩总和) select c.class_no,su.subject_name ,sum(s.score)from tb_class c inner join tb_score s on c.st_no=s.st_no inner join tb_subject su on s.subject_no=su.subject_no group by s.subject_no,c.class_no order by c.class_no # 另外一种写法 select su.subject_name as '课程', sum(case when c.class_no = 'c1' then score else 0 end) as 'c1', sum(case when c.class_no = 'c2' then score else 0 end) as 'c2' from tb_class c inner join tb_score s on c.st_no=s.st_no inner join tb_subject su on s.subject_no=su.subject_no group by s.subject_no;
#2.(查询每个班级语文成绩大于60的人数) select c.class_no,count(1) from tb_class c left join tb_score n on c.st_no=n.st_no right join tb_subject su on n.subject_no=su.subject_no where su.subject_name='语文' and n.score> 60 group by c.class_no
#3.(查询 语文成绩大于数学成绩 的姓名和归宿班级) select distinct a.name,a.class_no,a.score from ( select c.name,c.class_no,su.subject_name,s.score from tb_class c right join tb_score s on c.st_no=s.st_no right join tb_subject su on s.subject_no=su.subject_no order by c.class_no ) a, ( select c.name,c.class_no,su.subject_name,s.score from tb_class c right join tb_score s on c.st_no=s.st_no right join tb_subject su on s.subject_no=su.subject_no order by c.class_no ) b where a.name=b.name and a.subject_name='语文' and b.subject_name='数学' and a.score>b.score

#4.统计总分数大于180分的学生人数 select count(1) from ( select c.name, sum(s.score) as score from tb_class c inner join tb_score s on c.st_no=s.st_no group by c.name ) sc where sc.score>180