1、题目
题目:设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。
2、数据库的表结构
2.1、表1:Student (学生表)
1 create table student
2 (
3 sno
varchar(
20)
not null primary key,
4 sname
varchar(
20)
not null,
5 ssex
varchar(
20)
not null,
6 sbirthday
datetime,
7 class
varchar(
20)
8 );
2.2、表2:Teacher(教师表)
1 create table teacher
2 (
3 tno
varchar(
20)
not null primary key,
4 tname
varchar(
20)
not null,
5 tsex
varchar(
20)
not null,
6 tbirthday
datetime,
7 prof
varchar(
20),
8 depart
varchar(
20)
not null
9 );
2.3、表3:Course(课程表)
1 create table course
2 (
3 cno
varchar(
20)
not null primary key,
4 cname
varchar(
20)
not null,
5 tno
varchar(
20)
not null,
6 foreign key(tno)
references teacher(tno)
7 );
2.4、表4:Score(成绩表)
1 create table score
2 (
3 sno
varchar(
20)
not null,
4 foreign key(sno)
references student(sno),
5 cno
varchar(
20)
not null,
6 foreign key(cno)
references course(cno),
7 degree
decimal
8 );
3、数据库中的数据
3.1、Student(学生表)
1 insert into student
values(
'108',
'曾华',
'男',
'1977-09-01',
'95033');
2 insert into student
values(
'105',
'匡明',
'男',
'1975-10-02',
'95031');
3 insert into student
values(
'107',
'王丽',
'女',
'1976-01-23',
'95033');
4 insert into student
values(
'101',
'李军',
'男',
'1976-02-20',
'95033');
5 insert into student
values(
'109',
'王芳',
'女',
'1975-02-10',
'95031');
6 insert into student
values(
'103',
'陆君',
'男',
'1974-06-03',
'95031');
3.2、Teacher(教师表)
insert into teacher
values (
804,
'李成',
'男',
'1958-12-2',
'副教授',
'计算机系');
insert into teacher
values (
856,
'张旭',
'男',
'1969-3-12',
'讲师',
'电子工程系');
insert into teacher
values (
825,
'王萍',
'女',
'1972-5-5',
'助教',
'计算机系');
insert into teacher
values (
831,
'刘冰',
'女',
'1977-8-14',
'助教',
'电子工程系');
3.3、Course(课程表)
1 insert into course
values(
'3-105',
'计算机导论',
'825');
2 insert into course
values(
'3-245',
'操作系统',
'804');
3 insert into course
values(
'6-166',
'数字电路',
'856');
4 insert into course
values(
'9-888',
'高等数学',
'831');
3.4、Score(成绩表)
1 insert into score
values(
'103',
'3-245',
'86');
2 insert into score
values(
'105',
'3-245',
'75');
3 insert into score
values(
'109',
'3-245',
'68');
4 insert into score
values(
'103',
'3-105',
'92');
5 insert into score
values(
'105',
'3-105',
'88');
6 insert into score
values(
'109',
'3-105',
'76');
7 insert into score
values(
'103',
'3-105',
'64');
8 insert into score
values(
'105',
'3-105',
'91');
9 insert into score
values(
'109',
'3-105',
'78');
10 insert into score
values(
'103',
'6-166',
'85');
11 insert into score
values(
'105',
'6-166',
'79');
12 insert into score
values(
'109',
'6-166',
'81');
4、45小题答案
1、 查询Student表中的所有记录的Sname、Ssex和Class列。
select Sname,Ssex,Class
from student
2、 查询教师所有的单位即不重复的Depart列。
select distinct Depart
from teacher
3、查询Student表的所有记录。
select * from student
4、查询Score表中成绩在60到80之间的所有记录。
select * from Score
where Degree
between 60 and 80
5、查询Score表中成绩为85,86或88的记录。
select * from Score
where Degree
in(
85,
86,
88)
6、查询Student表中“95031”班或性别为“女”的同学记录。
select * from Student
where class
='95031' or Ssex
='女'
7、以Class降序查询Student表的所有记录。
select * from student
order by class
desc
8、以Cno升序、Degree降序查询Score表的所有记录。
select * from Score
order by cno
asc,degree
desc
9、查询“95031”班的学生人数。
select count(
*)
from student
where class
='95031'
10、 查询Score表中的最高分的学生学号和课程号。(子查询或者排序)查询语句查询出一个或者一列结果,可以作为其他查询语句的参数来使用,就是子查询,就是查询的嵌套。
select Sno,Cno
from Score
where Degree
=(
select max(Degree)
from Score)
select Sno,Cno
from Score
order by Degree
desc limit
0,
1
11、查询每门课的平均成绩,要按照课程分组group by,然后求没门课平均avg
select Cno,
avg(degree)
from Score
group by Cno
12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。Like模糊查询 3%以3开头 having只能跟在group by 后面
SELECT AVG(Degree)
FROM score
where Cno
LIKE '3%' GROUP BY Cno
HAVING count(
1)
>5
13、查询分数大于70,小于90的Sno列。
select Sno
from Score
where degree
>70 and degree
<90
14、查询所有学生的Sname、Cno和Degree列。
select Sname, Cno,Degree
from Score , student
where Score.Sno
=student.Sno
15、查询所有学生的Sno、Cname和Degree列。
select Sno,Cname,Degree
from Score , Course
where Score.Cno
=Course.Cno
16、查询所有学生的Sname、Cname和Degree列。
select Sname,Cname,Degree
from student,course,score
where student.Sno
=score.Sno
and course.Cno
=score.Cno
select Sname,Cname,Degree
from student
join score
on student.Sno
=score.Sno
join course
on course.Cno
=score.Cno
17、 查询“95033”班学生的平均分。
select avg(degree)
as 'class=95033' from Score
where Sno
in (
select Sno
from Student
where Class
='95033' )
18、假设使用如下命令建立了一个grade表:
create table grade(low int(3),upp int(3),rank char(1));
insert into grade values(90,100,’A’);
insert into grade values(80,89,’B’);
insert into grade values(70,79,’C’);
insert into grade values(60,69,’D’);
insert into grade values(0,59,’E’)
现查询所有同学的Sno、Cno和rank列。
select Sno,Cno,rank
from Score,grade
where degree
between low
and upp
19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
select * from score
where Cno
='3-105' and degree
>(
select max(degree )
from Score
where Sno
='109' and Cno
='3-105' )
20、查询score中选学多门课程的同学中分数为非最高分成绩的记录。
select * from score a
where Sno
in (
select Sno
from score
group by Sno
having count(
*)
>1)
and degree
<(
select max(degree )
from Score b
where b.cno
= a.cno)
21、查询成绩高于学号为“109”、课程号为“3-105”的成m绩的所有记录。
Select * from score
where degree
>(
select degree
from Score
where Sno
='109' and Cno
='3-105' order by degree
desc limit
1 )
22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
select sno,sname,sbirthday
from student
where year(sbirthday)
= (
select year(sbirthday)
from student
where sno
='108')
select sno,sname,sbirthday
from student
where year(sbirthday)
= (
select year(sbirthday)
from student
where sno
='101')
23、查询“张旭“教师任的学生成绩。
select Sno,degree
from score,Course
where score.Cno
=Course.Cno
and Course.Tno
= (
select Tno
from Teacher
where Tname
='张旭' )
select degree
from score
where Cno
in (
select cno
from course
where Tno
= (
select Tno
from Teacher
where Tname
='张旭' ) )
24、查询选修某课程的同学人数多于5人的教师姓名。
select Tname
from Teacher, Course
where Teacher.Tno
=Course.Tno
and Course.Cno
=(
select Cno
from Score
group by Cno
having count(
*)
>5)
select Tname
from Teacher
where tno
=(
select Tno
from Course
where cno
=(
select Cno
from Score
group by Cno
having count(
*)
>5 ))
25、查询95033班和95031班全体学生的记录。
select * from student
where class
in (
'95033',
'95031')
26、 查询存在有85分以上成绩的课程Cno.
select Cno
from score
where degree
>85
27、查询出“计算机系“教师所教课程的成绩表。
select * from course
where cno
in (
select cno
from course
where tno
in (
select tno
from teacher
where Depart
='计算机系'))
28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。
select Tname,Prof
from Teacher
where Depart
='计算机系' and Prof
not in(
select Prof
from Teacher
where Depart
='电子工程系')
select Tname,Prof
from Teacher
where Depart
='电子工程系' and Prof
not in(
select Prof
from Teacher
where Depart
='计算机系')
29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同
select Cno,Sno,Degree
from score
where cno
='3-105' and degree
>any(
select degree
from score
where cno
='3-245' )
order by degree
desc
30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. ?
select Cno,Sno,Degree
from score
where cno
='3-105' and degree
>all(
select degree
from score
where cno
='3-245' )
order by degree
desc
31、 查询所有教师和同学的name、sex和birthday.
select tname,tsex,tbirthday
from Teacher
union select sname,ssex,sbirthday
from Student
32、查询所有“女”教师和“女”同学的name、sex和birthday.
select Tname,Tsex,Tbirthday
from Teacher
where Tsex
='女' union select Sname,Ssex,Sbirthday
from Student
where Ssex
='女'
33、 查询成绩比该课程平均成绩低的同学的成绩表。
select * from score a
where degree
< (
select avg(degree)
from score b
where b.cno
=a.cno)
34、查询所有任课教师的Tname和Depart.
select Tname,Depart
from Teacher
where tno
in (
select tno
from course )
35 、查询所有未讲课的教师的Tname和Depart.
select Tname,Depart
from Teacher
where Tno
not in (
select Tno
from Course
where cno
in (
select cno
from score ))
36、查询至少有2名男生的班号。
select class
from student
where ssex
='男' group by class
having count(
*)
>1
37.查询不姓王的同学信息
select * from Student
where Sname
not like '王%'
38、查询Student表中每个学生的姓名和年龄。
select Sname,
year(now())
-year(sbirthday)
from Student
39、查询Student表中最大和最小的Sbirthday日期值。
select Max(Sbirthday ),
Min(Sbirthday )
from Student
40、以班号和年龄从大到小的顺序查询Student表中的全部记录。
select * from Student
order by class
desc, Sbirthday
41、查询“男”教师及其所上的课程。
select Tname,Cname
from course,teacher
where course.tno
= teacher.tno
and teacher.Tsex
='男'
42、查询最高分同学的Sno、Cno和Degree列。
select Sno,Cno,Degree
from score
where degree
=(
select max(degree)
from score)
排序写法:select Sno,Cno,Degree
from score
order by degree
desc limit
0,
1
43、查询所有选修“计算机导论”课程的“男”同学的成绩表。
SELECT * from score
JOIN course
ON course.Cno
=score.Cno
AND Cname
='计算机导论' join student
ON student.Sno
=score.Sno
AND Ssex
='男'
44、查询和“李军”同性别的所有同学的Sname.
select Sname
from Student
where Ssex
= (
select Ssex
from Student
where Sname
='李军')
45、查询和“李军”同性别并同班的同学Sname.
select Sname
from Student
where Ssex
= (
select Ssex
from Student
where Sname
='李军' )
and class
=(
select class
from student
where Sname
='李军')
46、查询所有选修“计算机导论”课程的“男”同学的成绩表。
select Sno,Cno,degree
from score
where Cno
=(
select Cno
from course
where Cname
='计算机导论')
and Sno
in (
select Sno
from student
where Ssex
='男')
转载于:https://www.cnblogs.com/combat/p/9566116.html
相关资源:2020年计算机二级MySQL考试经典强化练习及答案.doc