本文主要是介绍SQL练习题:2.4,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
建表
# 学生表
create table t_student
(stu_id varchar(10),stu_name varchar(10),stu_age datetime,stu_sex varchar(10)
);# 课程表
create table t_t_course
(c_id varchar(10),c_name varchar(10),c_teaid varchar(10)
);# 教师表
create table t_t_teacher
(tea_id varchar(10),tea_name varchar(10)
);# 成绩表
create table t_t_score
(s_stuid varchar(10),s_cid varchar(10),s_score decimal(18, 1)
);-- 向t_student表插入数据
insert into t_student(stu_id, stu_name, stu_age, stu_sex)
values ('01', '赵雷', '1990-01-01', '男');
insert into t_student(stu_id, stu_name, stu_age, stu_sex)
values ('02', '钱电', '1990-12-21', '男');
insert into t_student(stu_id, stu_name, stu_age, stu_sex)
values ('03', '孙风', '1990-12-20', '男');
insert into t_student(stu_id, stu_name, stu_age, stu_sex)
values ('04', '李云', '1990-12-06', '男');
insert into t_student(stu_id, stu_name, stu_age, stu_sex)
values ('05', '周梅', '1991-12-01', '女');
insert into t_student(stu_id, stu_name, stu_age, stu_sex)
values ('06', '吴兰', '1992-01-01', '女');
insert into t_student(stu_id, stu_name, stu_age, stu_sex)
values ('07', '郑竹', '1989-01-01', '女');
insert into t_student(stu_id, stu_name, stu_age, stu_sex)
values ('09', '张三', '2017-12-20', '女');
insert into t_student(stu_id, stu_name, stu_age, stu_sex)
values ('10', '李四', '2017-12-25', '女');
insert into t_student(stu_id, stu_name, stu_age, stu_sex)
values ('11', '李四', '2012-06-06', '女');
insert into t_student(stu_id, stu_name, stu_age, stu_sex)
values ('12', '赵六', '2013-06-13', '女');
insert into t_student(stu_id, stu_name, stu_age, stu_sex)
values ('13', '孙七', '2014-06-01', '女');-- 向t_t_course表插入数据
insert into t_t_course(c_id, c_name, c_teaid)
values ('01', '语文', '02');
insert into t_course(c_id, c_name, c_teaid)
values ('02', '数学', '01');
insert into t_course(c_id, c_name, c_teaid)
values ('03', '英语', '03');-- 向t_t_teacher表插入数据
insert into t_teacher(tea_id, tea_name)
values ('01', '张三');
insert into t_teacher(tea_id, tea_name)
values ('02', '李四');
insert into t_teacher(tea_id, tea_name)
values ('03', '王五');-- 向t_t_score表插入数据
insert into t_score(s_stuid, s_cid, s_score)
values ('01', '01', 80);
insert into t_score(s_stuid, s_cid, s_score)
values ('01', '02', 90);
insert into t_score(s_stuid, s_cid, s_score)
values ('01', '03', 99);
insert into t_score(s_stuid, s_cid, s_score)
values ('02', '01', 70);
insert into t_score(s_stuid, s_cid, s_score)
values ('02', '02', 60);
insert into t_score(s_stuid, s_cid, s_score)
values ('02', '03', 80);
insert into t_score(s_stuid, s_cid, s_score)
values ('03', '01', 80);
insert into t_score(s_stuid, s_cid, s_score)
values ('03', '02', 80);
insert into t_score(s_stuid, s_cid, s_score)
values ('03', '03', 80);
insert into t_score(s_stuid, s_cid, s_score)
values ('04', '01', 50);
insert into t_score(s_stuid, s_cid, s_score)
values ('04', '02', 30);
insert into t_score(s_stuid, s_cid, s_score)
values ('04', '03', 20);
insert into t_score(s_stuid, s_cid, s_score)
values ('05', '01', 76);
insert into t_score(s_stuid, s_cid, s_score)
values ('05', '02', 87);
insert into t_score(s_stuid, s_cid, s_score)
values ('06', '01', 31);
insert into t_score(s_stuid, s_cid, s_score)
values ('06', '03', 34);
insert into t_score(s_stuid, s_cid, s_score)
values ('07', '02', 89);
insert into t_score(s_stuid, s_cid, s_score)
values ('07', '03', 98);
练习
#**25. 查询和学号"01"同学学习的课程完全相同的其他同学的信息**
select t.stu_id, count(*)
from t_student tinner join t_score sc on t.stu_id = sc.s_stuidinner join t_course co on sc.s_cid = co.c_id
where co.c_id in (select co.c_idfrom t_student t1inner join t_score sc1 on t1.stu_id = sc1.s_stuidinner join t_course co1 on sc1.s_cid = co1.c_idwhere t1.stu_id = 01)
group by t.stu_id
having count(*) = (select count(*)from t_student t1inner join t_score sc1 on t1.stu_id = sc1.s_stuidinner join t_course co1 on sc1.s_cid = co1.c_idwhere t1.stu_id = 01);#26. 查询没学过"张三"老师讲授的任一门课程的学生姓名
select s1.stu_name, s1.stu_id
from t_student s1
where s1.stu_id not in (select s.stu_idfrom t_student sinner join t_score sc on s.stu_id = sc.s_stuidinner join t_course co on sc.s_cid = co.c_idwhere co.c_id in (select co1.c_idfrom t_teacher teinner join t_course co1 on te.tea_id = co1.c_teaidwhere te.tea_name = '张三'));#**27. 查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩** (成绩保留两位小数)
select s.stu_id, s.stu_name, AVG(sc.s_score)
from t_student sinner join t_score sc on s.stu_id = sc.s_stuid
where sc.s_score < 60
group by s.stu_id, s.stu_name
having count(*) >= 2;#**28. 检索"01"课程分数小于 60,按分数降序排列的学生信息**
select *
from t_student sinner join t_score sc on s.stu_id = sc.s_stuidinner join t_course co on sc.s_cid = co.c_id
where sc.s_score < 60and co.c_id = 01
order by sc.s_score DESC;#**29. 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩** (平均成绩保留两位小数)
select s.*, sc.s_score, avg.a
from t_student sinner join t_score sc on s.stu_id = sc.s_stuidinner join (Select Avg(sc1.s_score) as 'a', sc1.s_stuid from t_score sc1 group by sc1.s_stuid) avgon s.stu_id = avg.s_stuid
order by a DESC;#**30. 查询各科成绩最高分、最低分、平均分、选修人数、及格率** (及格率以百分比格式显示)
select MAX(sc.s_score),MIN(sc.s_score),AVG(sc.s_score),COUNT(sc.s_score),concat(FORMAT(((select Count(*) from t_score sc1 where sc1.s_cid = sc.s_cid and sc1.s_score >= 60) /(select Count(*) from t_score sc2 where sc2.s_cid = sc.s_cid)) * 100, 2), '%')
from t_score scinner join t_student s on s.stu_id = sc.s_stuid
group by sc.s_cid;#31. 按各科成绩进行排序,并显示排名, 成绩重复时不保留名次空缺
select s.*, sc.s_cid, row_number() over (PARTITION BY sc.s_cid ORDER BY sc.s_score)
from t_student sinner join t_score sc on s.stu_id = sc.s_stuid;#**32. 按各科成绩进行排序,并显示排名,成绩重复时保留名次空缺**
select s.*, sc.s_cid, RANK() over (PARTITION BY sc.s_cid ORDER BY sc.s_score)
from t_student sinner join t_score sc on s.stu_id = sc.s_stuid;
这篇关于SQL练习题:2.4的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!