一、创建数据表
1. 创建学生表“students”:
create table students
(sno varchar(3) not null,
sname varchar(4) not null,
ssex varchar(2) not null,
sbirthday datetime,
class varchar(5))
2. 创建课程表“courses”:
create table courses
(cno varchar(5) not null,
cname varchar(10) not null,
tno varchar(10) not null)
3. 创建成绩表“scores”:
create table scores
(sno varchar(3) not null,
cno varchar(5) not null,
degree numeric(10, 1) not null)
4. 创建教师表“teachers”:
create table teachers
(tno varchar(3) not null,
tname varchar(4) not null,
tsex varchar(2) not null,
tbirthday datetime not null,
prof varchar(6),
depart varchar(10) not null)
二、 表中插入数据
1. students表中插入数据:
insert into students(sno,sname,ssex,sbirthday,class) values (108 ,'曾华' ,'男' ,'1977-09-01',95033);
insert into students(sno,sname,ssex,sbirthday,class) values (105 ,'匡明' ,'男' ,'1975-10-02',95031);
insert into students(sno,sname,ssex,sbirthday,class) values (107 ,'王丽' ,'女' ,'1976-01-23',95033);
insert into students(sno,sname,ssex,sbirthday,class) values (101 ,'李军' ,'男' ,'1976-02-20',95033);
insert into students(sno,sname,ssex,sbirthday,class) values (109 ,'王芳' ,'女' ,'1975-02-10',95031);
insert into students(sno,sname,ssex,sbirthday,class) values (103 ,'陆君' ,'男' ,'1974-06-03',95031);
2. courses表中插入数据:
insert into courses(cno,cname,tno) values ('3-105' ,'计算机导论',825);
insert into courses(cno,cname,tno) values ('3-245' ,'操作系统' ,804);
insert into courses(cno,cname,tno) values ('6-166' ,'数据电路' ,856);
insert into courses(cno,cname,tno) values ('9-888' ,'高等数学' ,100);
3. scores表中插入数据:
insert into scores(sno,cno,degree) values (103,'3-245',86);
insert into scores(sno,cno,degree) values (105,'3-245',75);
insert into scores(sno,cno,degree) values (109,'3-245',68);
insert into scores(sno,cno,degree) values (103,'3-105',92);
insert into scores(sno,cno,degree) values (105,'3-105',88);
insert into scores(sno,cno,degree) values (109,'3-105',76);
insert into scores(sno,cno,degree) values (101,'3-105',64);
insert into scores(sno,cno,degree) values (107,'3-105',91);
insert into scores(sno,cno,degree) values (108,'3-105',78);
insert into scores(sno,cno,degree) values (101,'6-166',85);
insert into scores(sno,cno,degree) values (107,'6-106',79);
insert into scores(sno,cno,degree) values (108,'6-166',81);
4. teachers表中插入数据:
insert into teachers(tno,tname,tsex,tbirthday,prof,depart) values (804,'李诚','男','1958-12-02','副教授','计算机系');
insert into teachers(tno,tname,tsex,tbirthday,prof,depart) values (856,'张旭','男','1969-03-12','讲师','电子工程系');
insert into teachers(tno,tname,tsex,tbirthday,prof,depart) values (825,'王萍','女','1972-05-05','助教','计算机系');
insert into teachers(tno,tname,tsex,tbirthday,prof,depart) values (831,'刘冰','女','1977-08-14','助教','电子工程系');
三、开始做题
1. 查询students表中的所有记录的sname、ssex和class列:
select sname,ssex,class
from students;
结果输出:
![](https://img.haomeiwen.com/i184788/1bbb8b70aeb5a2dc.png)
2. 查询教师所有的单位,即不重复的depart列:
select distinct depart
from teachers;
结果输出:
![](https://img.haomeiwen.com/i184788/4c51f0abd6bdbb5d.png)
3. 查询students表的所有记录:
select *
from students;
结果输出:
![](https://img.haomeiwen.com/i184788/c0ea0eb26987d848.png)
4. 查询scores表中成绩在60到80之间的所有记录:
select *
from scores
where degree between 60 and 80;
结果输出:
![](https://img.haomeiwen.com/i184788/955e4ad62ae655c2.png)
5. 查询score表中成绩为85,86或88的记录:
select *
from scores
where degree in (85,86,88);
结果输出:
![](https://img.haomeiwen.com/i184788/a271c75675928117.png)
6. 查询students表中“95031”班或性别为“女”的同学记录:
select *
from students
where class = '95031' or ssex = '女';
结果输出:
![](https://img.haomeiwen.com/i184788/abe0f9d15bac0252.png)
7. 以class降序查询students表的所有记录:
select *
from students
order by class desc;
结果输出:
![](https://img.haomeiwen.com/i184788/0f654e25e2649331.png)
8. 以cno升序、degree降序查询scores表的所有记录:
select *
from scores
order by cno,degree desc;
结果输出:
![](https://img.haomeiwen.com/i184788/54e18cc7a0816d57.png)
9. 查询“95031”班的学生人数:
select class,count(1) as stunum
from students
where class = '95031';
结果输出:
![](https://img.haomeiwen.com/i184788/0fb310630b4dab6b.png)
10. 查询scores表中的最高分的学生学号和课程号:
select sno,cno
from scores
order by degree
limit 1;
结果输出:
![](https://img.haomeiwen.com/i184788/aba9b3b710aebdc5.png)
11. 查询‘3-105’号课程的平均分:
select avg(degree)
from scores
where cno = '3-105';
结果输出:
![](https://img.haomeiwen.com/i184788/07d54c1f8fdec1d0.png)
12. 查询scores表中至少有5名学生选修的并以3开头的课程的平均分数:
select cno,avg(degree)
from scores
where cno like '3%'
group by cno
having count(sno) >= 5;
结果输出:
![](https://img.haomeiwen.com/i184788/2d929e7a58a640c9.png)
13. 查询最低分大于70,最高分小于90的sno列:
方法1:
select sno
from scores
group by sno
having min(degree) > 70 and max(degree) < 90;
方法2:
select sno
from scores
group by sno
having degree between '70' and '90';
方法3:
select sno
from scores
group by sno
having max(degree) between '70' and '90' and min(degree) between '70' and '90';
结果输出:
![](https://img.haomeiwen.com/i184788/a2618b1d4deff793.png)
14. 查询所有学生的sname、sno和segree列:
select sname,cno,degree
from students inner join scores
on scores.sno = students.sno
order by sname;
结果输出:
![](https://img.haomeiwen.com/i184788/0ae3b86cb8b9fb21.png)
15. 查询所有学生的sno、sname和segree列:
select sno,cname,degree
from scores inner join courses
on scores.cno = courses.cno
order by sno;
结果输出:
![](https://img.haomeiwen.com/i184788/28dd709f78d3d6f2.png)
16. 查询所有学生的sname、cname和degree列:
select sname,cname,degree
from students inner join scores
on students.sno = scores.sno
inner join courses
on scores.cno = courses.cno
order by sname;
结果输出:
![](https://img.haomeiwen.com/i184788/d4e52051dd4bbb6a.png)
17. 查询“95033”班所选课程的平均分:
select courses.cno,cname,avg(degree)
from students inner join scores
on students.sno = scores.sno
inner join courses
on scores.cno = courses.cno
where class = '95033'
group by courses.cno
order by courses.cno
结果输出:
![](https://img.haomeiwen.com/i184788/fcb13c67154ae9ef.png)
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');
commit;
现查询所有同学的sno、cno和rank列:
select sno,cno,rank
from scores inner join grade
on (scores.degree >= grade.low and scores.degree <= grade.upp)
order by sno;
结果输出:
![](https://img.haomeiwen.com/i184788/6184452eaf3b80b1.png)
19. 查询选修“3-105”课程同学的成绩高于“109”号同学成绩的所有同学的记录:
select s1.sno,s1.degree
from scores as s1 inner join scores as s2
on (s1.cno = s2.cno and s1.degree > s2.degree)
where s1.cno = '3-105' and s2.sno = '109'
order by s1.sno;
结果输出:
![](https://img.haomeiwen.com/i184788/5d6e3c56dc6b33b4.png)
20. 查询scores中选学一门以上课程的同学中分数为非最高分成绩的记录:
方法1:
select *
from scores
group by sno
having count(cno)>1 and degree != max (degree);
方法2:
select a.*
from scores a
where a.degree<(select max(degree)
from scores b
where a.sno=b.sno);
结果输出:
![](https://img.haomeiwen.com/i184788/8b536581d8d9f01f.png)
21. 查询成绩高于学号为“109”,课程号为“3-105”的成绩的所有记录:
方法1:
select sno,degree
from scores
where degree >
(select max(degree)
from scores
where sno = 109)
and cno = '3-105';
方法2:
select s1.sno,s1.degree
from scores as s1 inner join scores as s2
on (s1.cno = s2. cno and s1.degree > s2.degree)
where s1.cno = '3-105' and s2.sno = '109'
order by s1.sno;
结果输出:
![](https://img.haomeiwen.com/i184788/1dc258c1e0784165.png)
22. 查询和学号为108的同学同年出生的所有学生的sno、sname和sbirthday列:
方法1:
select sno,sname,sbirthday
from students
where year(sbirthday) = (
select year(sbirthday)
from students
where sno = '108'
);
方法2:
select s1.sno,s1.sname,s1.sbirthday
from students s1 join students s2
on year(s1.sbirthday) = year(s2.sbirthday)
where s2.sno = '108';
结果输出:
![](https://img.haomeiwen.com/i184788/3b070d782a1af404.png)
23. 查询“张旭“教师任课的学生成绩:
select sno,degree
from scores join courses
on scores.cno = courses.cno join teachers
on courses.tno = teachers.tno
where tname = '张旭';
结果输出:
![](https://img.haomeiwen.com/i184788/e564fc2e4edb0988.png)
24. 查询选修某课程的同学人数多于5人的教师姓名:
select distinct tname
from scores join courses
on scores.cno = courses.cno join teachers
on courses.tno = teachers.tno
group by scores.cno
having count(scores.sno)>5;
结果输出:
![](https://img.haomeiwen.com/i184788/e4224a2cc247b061.png)
25. 查询95033班和95031班全体学生的记录:
select *
from students
where class in ('95033','95031')
order by class;
结果输出:
![](https://img.haomeiwen.com/i184788/40c3df0ba8eaed9c.png)
26. 查询存在有85分以上成绩的课程cno:
select distinct cno
from scores
where degree > 85;
结果输出:
![](https://img.haomeiwen.com/i184788/86a8ee2654b78caa.png)
27. 查询出“计算机系“教师所教课程的成绩表:
select tname,scores.cno,sno,degree
from scores join courses on scores.cno = courses.cno
join teachers on courses.tno = teachers.tno
where depart = '计算机系'
order by tname,scores.cno,sno,degree desc;
结果输出:
![](https://img.haomeiwen.com/i184788/9ec5c54e2e9cf7ef.png)
28. 查询“计算机系”职称与“电子工程系“职称不同的教师的tname和prof:
select tname,prof
from teachers
where depart = '计算机系' and prof not in (
select distinct prof
from teachers
where depart = '电子工程系'
);
结果输出:
![](https://img.haomeiwen.com/i184788/1b2b9b99215b6da6.png)
29. 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的cno、sno和degree,并按degree从高到低次序排序:
select cno,sno,degree
from scores
where cno = '3-105' and degree > any(
select degree
from scores
where cno = '3-245')
order by degree desc;
结果输出:
![](https://img.haomeiwen.com/i184788/52fcd462ff8dc3a4.png)
30. 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的cno、sno和degree:
select cno,sno,degree
from scores
where cno = '3-105' and degree > all(
select degree
from scores
where cno = '3-245')
order by degree desc;
结果输出:
![](https://img.haomeiwen.com/i184788/ae4f83d05b7fb632.png)
31. 查询所有教师和同学的name、sex和birthday:
select sname,ssex,sbirthday
from students
union
select tname,tsex,tbirthday
from teachers;
结果输出:
![](https://img.haomeiwen.com/i184788/1a2155eb85e7c8cc.png)
32. 查询所有“女”教师和“女”同学的name、sex和birthday:
select sname,ssex,sbirthday
from students
where ssex = '女'
union
select tname,tsex,tbirthday
from teachers
where tsex = '女';
结果输出:
![](https://img.haomeiwen.com/i184788/86f0fc06b3996fea.png)
33. 查询成绩比该课程平均成绩低的同学的成绩表:
select s1.*
from scores as s1 inner join (
select cno,avg(degree) as adegree
from scores
group by cno) as s2
on (s1.cno = s2.cno and s1.degree < s2.adegree);
结果输出:
![](https://img.haomeiwen.com/i184788/1f65345162019def.png)
34. 查询所有任课教师的tname和depart:
方法1:
select tname,depart
from teachers left join courses
on teachers.tno = courses.tno
where cno is not null;
方法2:
select tname,depart
from teachers
where tno in (
select tno
from courses
);
结果输出:
![](https://img.haomeiwen.com/i184788/3377682c1cd7c257.png)
35. 查询所有未讲课的教师的tname和depart:
方法1:
select tname,depart
from teachers left join courses
on teachers.tno = courses.tno
where cno is null;
方法2:
select tname,depart
from teachers
where tno not in (
select tno
from courses
);
结果输出:
![](https://img.haomeiwen.com/i184788/7a66b04a4013a058.png)
36. 查询至少有2名男生的班号:
select class
from students
group by class
having count(ssex = '男')>=2;
结果输出:
![](https://img.haomeiwen.com/i184788/0e1283e4bdea5fb4.png)
37. 查询students表中不姓“王”的同学记录:
select *
from students
where sname not like '王%';
结果输出:
![](https://img.haomeiwen.com/i184788/c73ea9551646b44c.png)
38. 查询students表中每个学生的姓名和年龄:
select sname,year(now())-year(sbirthday) as sage
from students
order by sage;
结果输出:
![](https://img.haomeiwen.com/i184788/3bff377ea280b56e.png)
39. 查询student表中最大和最小的sbirthday日期值:
select max(sbirthday),min(sbirthday)
from students;
结果输出:
![](https://img.haomeiwen.com/i184788/b2a5549e407d76ac.png)
40. 以班号和年龄从大到小的顺序查询students表中的全部记录:
select *
from students
order by class desc, sbirthday asc;
结果输出:
![](https://img.haomeiwen.com/i184788/3121a07319becf81.png)
41. 查询“男”教师及其所上的课程:
select tname,cname
from teachers join courses
on teachers.tno = courses.tno
where tsex = '男';
结果输出:
![](https://img.haomeiwen.com/i184788/5fa7f608a13722d4.png)
42. 查询最高分同学的sno、cno和degree列:
select *
from scores
group by cno
having degree = max(degree);
结果输出:
![](https://img.haomeiwen.com/i184788/9d0294984a2f3636.png)
43. 查询和“李军”同性别的所有同学的sname:
方法1:
select sname
from students
where ssex =
(select ssex
from students
where sname = '李军');
方法2:
select s1.sname
from students as s1 inner join students as s2
on s1.ssex = s2.ssex
where s2.sname = '李军';
结果输出:
![](https://img.haomeiwen.com/i184788/4c963cc74843026b.png)
44. 查询和“李军”同性别并同班的同学sname:
select s1.sname
from students s1 join students s2
on s1.ssex = s2.ssex and s1.class = s2.class
where s2.sname = '李军';
结果输出:
![](https://img.haomeiwen.com/i184788/614529828d722a58.png)
45. 查询所有选修“计算机导论”课程的“男”同学的成绩表:
select scores.sno,degree
from students join scores
on students.sno = scores.sno join courses
on scores.cno = courses.cno
where cname = '计算机导论' and ssex = '男'
order by sno;
结果输出:
![](https://img.haomeiwen.com/i184788/ccacb0a94b94f281.png)
网友评论