题目:新建一个数据库ClassManager,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)表(四)所示,数据如表1-2的表(一)表(四)所示。用#并完成相关题目。
一.表1-1数据库的表结构
表(一)Student (学生表)
属性名 数据类型 可否为空 含 义
Sno varchar (20) 否 学号
Sname varchar (20) 否 学生姓名
Ssex varchar (20) 否 学生性别
Sbirthday datetime 可 学生出生年月
Class varchar (20) 可 学生所在班级
表(二)Course(课程表)
属性名 数据类型 可否为空 含 义
Cno varchar (20) 否 课程号
Cname varchar (20) 否 课程名称
Tno varchar (20) 否 教工编号
表(三)Score(成绩表)
属性名 数据类型 可否为空 含 义
Sno varchar (20) 否 学号
Cno varchar (20) 否 课程号
Degree Decimal(4,1) 可 成绩
表(四)Teacher(教师表)
属性名 数据类型 可否为空 含 义
Tno varchar (20) 否 教工编号
Tname varchar (20) 否 教工姓名
Tsex varchar (20) 否 教工性别
Tbirthday datetime 可 教工出生年月
Prof varchar (20) 可 职称
Depart varchar (20) 否 教工所在部门
二.表1-2数据库中的数据
表(一)Student
Sno Sname Ssex Sbirthday class
108 曾华 男 1977-09-01 95033
105 匡明 男 1975-10-02 95031
107 王丽 女 1976-01-23 95033
101 李军 男 1976-02-20 95033
109 王芳 女 1975-02-10 95031
103 陆君 男 1974-06-03 95031
表(二)Course
Cno Cname Tno
3-105 计算机导论 825
3-245 操作系统 804
6-166 数字电路 856
9-888 高等数学 831
表(三)Score
Sno Cno Degree
103 3-245 86
105 3-245 75
109 3-245 68
103 3-105 92
105 3-105 88
109 3-105 76
101 3-105 64
107 3-105 91
108 3-105 78
101 6-166 85
107 6-166 79
108 6-166 81
表(四)Teacher
Tno Tname Tsex Tbirthday Prof Depart
804 李诚 男 1958-12-02 副教授 计算机系
856 张旭 男 1969-03-12 讲师 电子工程系
825 王萍 女 1972-05-05 助教 计算机系
831 刘冰 女 1977-08-14 助教 电子工程系
三.完成以下操作
0.根据上述题目和表格,创建相应数据库,创建相应表结构,并插入给定数据
解答:
create database ClassManager;
use ClassManager;
create table student (
sno varchar(20) not null comment ‘学号’,
sname varchar(20) not null,
ssex varchar(20) not null,
sbirthday datetime,
class varchar(20)
);
create table course (
cno varchar(20) not null,
cname varchar(20) not null,
tno varchar(20) not null
);
create table score (
sno varchar(20) not null,
cno varchar(20) not null,
degree decimal(4,1)
);
create table teacher (
tno varchar(20) not null,
tname varchar(20) not null,
tsex varchar(20) not null,
tbirthday datetime,
prof varchar(20) ,
depart varchar(20) not null
);
insert into student (sno, sname, ssex, sbirthday, class) values (‘108’, ‘曾华’,‘男’,‘1977-09-01’,‘95033’);
insert into student (sno, sname, ssex, sbirthday, class) values (‘105’, ‘匡明’,‘男’,‘1975-10-02’,‘95031’);
insert into student (sno, sname, ssex, sbirthday, class) values (‘107’, ‘王丽’,‘女’,‘1976-01-23’,‘95033’);
insert into student (sno, sname, ssex, sbirthday, class) values (‘101’, ‘李军’,‘男’,‘1976-02-20’,‘95033’);
insert into student (sno, sname, ssex, sbirthday, class) values (‘109’, ‘王芳’,‘女’,‘1975-02-10’,‘95031’);
insert into student (sno, sname, ssex, sbirthday, class) values (‘103’, ‘陆君’,‘男’,‘1974-06-03’,‘95031’);
insert into course (cno, cname, tno) values (‘3-105’, ‘计算机导论’, ‘825’);
insert into course (cno, cname, tno) values (‘3-245’, ‘操作系统’, ‘804’);
insert into course (cno, cname, tno) values (‘6-166’, ‘数字电路’, ‘856’);
insert into course (cno, cname, tno) values (‘9-888’, ‘高等数学’, ‘831’);
insert into score (sno, cno, degree) values (‘103’, ‘3-245’, ‘86’);
insert into score (sno, cno, degree) values (‘105’, ‘3-245’, ‘75’);
insert into score (sno, cno, degree) values (‘109’, ‘3-245’, ‘68’);
insert into score (sno, cno, degree) values (‘103’, ‘3-105’, ‘92’);
insert into score (sno, cno, degree) values (‘105’, ‘3-105’, ‘88’);
insert into score (sno, cno, degree) values (‘109’, ‘3-105’, ‘76’);
insert into score (sno, cno, degree) values (‘101’, ‘3-105’, ‘64’);
insert into score (sno, cno, degree) values (‘107’, ‘3-105’, ‘91’);
insert into score (sno, cno, degree) values (‘108’, ‘3-105’, ‘78’);
insert into score (sno, cno, degree) values (‘101’, ‘6-166’, ‘85’);
insert into score (sno, cno, degree) values (‘107’, ‘6-166’, ‘79’);
insert into score (sno, cno, degree) values (‘108’, ‘6-166’, ‘81’);
insert into teacher (tno, tname, tsex, tbirthday, prof, depart) values (‘804’, ‘李诚’,‘男’,‘1958-12-02’,‘副教授’,‘计算机系’);
insert into teacher (tno, tname, tsex, tbirthday, prof, depart) values (‘856’, ‘张旭’,‘男’,‘1969-03-12’,‘讲师’,‘电子工程系’);
insert into teacher (tno, tname, tsex, tbirthday, prof, depart) values (‘825’, ‘王萍’,‘女’,‘1972-05-05’,‘助教’,‘计算机系’);
insert into teacher (tno, tname, tsex, tbirthday, prof, depart) values (‘831’, ‘刘冰’,‘女’,‘1977-08-14’,‘助教’,‘电子工程系’);
select sname, ssex, class
from student; – 1
select distinct depart
from teacher; – 2
select *
from student; – 3
select *
from score
where degree between 60 and 80; – 4
select *
from score
where degree in(85, 86, 88); – 5
select *
from student
where class=‘95031’ or Ssex=‘女’; – 6
select *
from student
order by class desc; – 7
select *
from score
order by cno asc, degree desc; – 8
select count(*) as 学生人数-- as可省略
from student
where class=‘95031’; – 9
select sno, cno
from score
order by degree desc
limit 1; – 10
select sno, cno
from score s1
where degree = (
select max(degree)
from score s2
where s1.cno = s2.cno
) – 10.1
select cno, avg(degree)
from score
group by cno; – 11;
select cno, avg(degree)
from score
where cno like ‘3%’
group by cno having count(cno)>5; – 12
select sno, degree
from score
where degree>70 and degree<90; – 13
select sname, cno, degree
from student st
left join score sc on st.sno = sc.sno; – 14
select sno, cname, degree
from score sc
inner join course c on sc.cno = c.cno; – 15
select sname, cname, degree
from student st
left join score sc on st.sno = sc.sno
left join course c on sc.cno = c.cno; – 16
select cno, avg(degree)
from student st
inner join score sc on st.sno = sc.Sno
where st.class = ‘95033’
group by cno ; – 17
select *
from student st
inner join score sc on st.sno = sc.Sno
where sc.cno = ‘3-105’
and sc.degree > (select degree from score sc where sc.sno = ‘109’ and sc.cno = ‘3-105’); – 18
select *
from score
where degree > (select degree from score where sno = ‘109’ and cno = ‘3-105’); – 19
select sno, sname, sbirthday
from student st
where year(Sbirthday)
in (select year(sbirthday)from student where sno in(‘108’ , ‘101’)); – 20
select degree
from teacher t
inner join course co on t.tno = co.tno
inner join score sc on co.cno = sc.cno
where tname = ‘张旭’; – 21
select tname
from score sc
inner join course co on sc.cno = co.Cno
inner join teacher t on t.tno = co.Tno
group by sc.cno having count(sc.cno) > 5; – 22
select *
from student st
where class in(‘95033’, ‘95031’); – 23
select cno
from score
where degree > 85
group by cno; – 24
select degree
from teacher t
inner join course co on t.tno = co.tno
inner join score sc on co.cno = sc.cno
where depart = ‘计算机系’; – 25
select tname, prof
from teacher
where depart in (‘计算机系’,‘电子工程系’)
group by prof having count(prof) = 1; – 26
select tname, prof from teacher
where depart = ‘计算机系’ and prof not in (
select prof from teacher
where depart = ‘电子工程系’
); – 26.1
select sname as name, ssex as sex, sbirthday as birthday
from(
select sname, ssex, sbirthday from student
union ALL
select tname, tsex, tbirthday from teacher
)as ts; – 27
select sname as name, ssex as sex, sbirthday as birthday
from(
select sname, ssex, sbirthday from student where ssex = ‘女’
union ALL
select tname, tsex, tbirthday from teacher where tsex = ‘女’
)as ts; – 28
– 取出首条记录的a.cno用作过滤,子查询里以avg函数得到该课程的平均分,主查询以分数比对平均分,满足条件保留否则抛弃(degree小于平均分的留下);
– 跟着判断父查询表下一条记录,处理过程相同,最后合并各次判断结果从而的到最终结果。
select *
from score sc1
where sc1.degree<(
select avg(degree)
from score sc2
where sc1.cno=sc2.cno); – 29
select tname, depart
from teacher t
left join course co on t.tno = co.Tno
left join score sc on sc.cno = co.cno
group by tname; – 30
select tname, depart
from teacher t
inner join course co on t.tno = co.Tno
where tname
not in (select tname
from teacher t
inner join course co on t.tno = co.Tno
inner join score sc on sc.cno = co.cno
group by tname); – 31
select class
from student
group by class having COUNT(Ssex = ‘男’) > 1; – 32
select *
from student
where sname not like ‘王%’; – 33
select sname, (year(NOW()) - year(Sbirthday))as age
from student; – 34
select max(Sbirthday), min(Sbirthday)
from student; – 35
select *
from student
order by class desc, Sbirthday asc; – 36
select tname, cname
from teacher t
inner join course c on c.tno = t.tno
where t.Tsex = ‘男’; – 37
select sno, cno, degree
from score sc1
where degree = (
select max(degree)
from score sc2
where sc1.cno = sc2.cno
); – 38
select sname
from student
where ssex in (select ssex from student where sname = ‘李军’); – 39
select sname
from student
where ssex in (select ssex from student where sname = ‘李军’)
and class in (select class from student where sname = ‘李军’); – 40
select degree
from course co
inner join score sc on co.cno = sc.cno
inner join student st on st.sno = sc.sno
where cname = ‘计算机导论’ and ssex = ‘男’; – 41