MySQL 表查询语句练习题:
一、 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。
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)
可
成绩
主码:Sno+ Cno
表(四)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
助教
电子工程系
1、查询Student表中的所有记录的Sname、Ssex和Class列。
2、查询教师所有的单位即不重复的Depart列。
3、查询Student表的所有记录。
4、查询Score表中成绩在60到80之间的所有记录。
5、查询Score表中成绩为85,86或88的记录。
6、查询Student表中“95031”班或性别为“女”的同学记录。
7、以Class降序查询Student表的所有记录。
8、以Cno升序、Degree降序查询Score表的所有记录。
9、查询“95031”班的学生人数。
10、查询Score表中的最高分的学生学号和课程号。(子查询或者排序)
11、查询每门课的平均成绩。
12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
13、查询分数大于70,小于90的Sno列。
14、查询所有学生的Sname、Cno和Degree列。
15、查询所有学生的Sno、Cname和Degree列。
16、查询所有学生的Sname、Cname和Degree列。
17、查询“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列。
19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
20、查询score中选学多门课程的同学中分数为非最高分成绩的记录。
21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
23、查询“张旭“教师任课的学生成绩。
24、查询选修某课程的同学人数多于5人的教师姓名。
25、查询95033班和95031班全体学生的记录。
26、查询存在有85分以上成绩的课程Cno.
27、查询出“计算机系“教师所教课程的成绩表。
28、查询“计算 机系”与“电子工程系“不同职称的教师的Tname和Prof。
29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。
30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree.
31、查询所有教师和同学的name、sex和birthday.
32、查询所有“女”教师和“女”同学的name、sex和birthday.
33、查询成绩比该课程平均成绩低的同学的成绩表。
34、查询所有任课教师的Tname和Depart.
35、查询所有未讲课的教师的Tname和Depart.
36、查询至少有2名男生的班号。
37、查询Student表中不姓“王”的同学记录。
38、查询Student表中每个学生的姓名和年龄。
39、查询Student表中最大和最小的Sbirthday日期值。
40、以班号和年龄从大到小的顺序查询Student表中的全部记录。
41、查询“男”教师及其所上的课程。
42、查询最高分同学的Sno、Cno和Degree列。
43、查询和“李军”同性别的所有同学的Sname.
44、查询和“李军”同性别并同班的同学Sname.
45、查询所有选修“计算机导论”课程的“男”同学的成绩表。
答案如下:
1.SELECT Sname,Ssex,Class FROM student;
2.SELECT DISTINCT Depart from teacher;
3.SELECT * FROM student;
4.SELECT * FROM score WHERE 60<=Degree<=80;
5.SELECT * FROM score WHERE Degree=85 OR Degree=86 OR Degree=88;
6.SELECT * FROM student WHERE Class='95031' OR Ssex='女';
7.SELECT * FROM student ORDER BY Class DESC;
8.SELECT *FROM score ORDER BY Cno ASC, Degree DESC;
9.SELECT COUNT(*) FROM student WHERE Class='95031';
10.SELECT Sno,Cno FROM score ORDER BY Degree DESC LIMIT 0,1;
11.SELECT Cno,AVG(Degree) FROM score GROUP BY Cno;
12.SELECT Cno 课程,AVG(Degree) 平均分 FROM score WHERE Cno LIKE '3%' HAVING COUNT(Cno)>4 ORDER BY Cno;
13.SELECT Sno 学号, Degree 成绩 FROM score GROUP BY Sno HAVING MAX(Degree)<90 AND MIN(Degree)>70;
14.SELECT s.Sname 姓名, f.Cno 课程号, f.Degree 成绩 FROM student s, score f WHERE s.Sno=f.Sno GROUP BY Sname;
15.SELECT s.Sno 学号,c.Cname 课程名,f.Degree 成绩 FROM student s,course c,score f WHERE s.Sno=f.Sno AND c.Cno=f.Cno GROUP BY Sname;
16.SELECT s.Sname 姓名,c.Cname 课程名,f.Degree 成绩 FROM student s,course c,score f WHERE s.Sno=f.Sno AND c.Cno=f.Cno GROUP BY Sname;
17.SELECT s.Sname,AVG(Degree) FROM student s JOIN score f ON s.Sno=f.Sno GROUP BY s.Sname;
18.SELECT f.Sno,f.Cno,g.rank FROM score f LEFT JOIN grade g ON f.Degree BETWEEN g.low AND g.upp;
19.SELECT * FROM score f WHERE f.Degree>(SELECT Degree FROM score WHERE Sno='109'AND Cno='3-105');
20.select * from Score a where Degree 1);
21.select * from student,Score where student.Sno=Score.Sno and Score.Degree>(select Degree from Score where Cno='3-105' and Sno='109');
22.SELECT Sname,Sno,Sbirthday FROM student WHERE YEAR(Sbirthday) = (SELECT YEAR(s.Sbirthday) FROM student s WHERE s.Sno='108');
23.SELECT Degree FROM score WHERE Cno = (SELECT Cno FROM course WHERE Tno = (SELECT Tno FROM teacher WHERE Tname='张旭'));
24.SELECT Tname FROM teacher WHERE Tno = (SELECT Tno FROM course WHERE Cno = (SELECT Cno FROM score HAVING COUNT(Sno)>5));
25.SELECT * FROM student WHERE Class='95033'OR'95031' ORDER BY Sno;
26.SELECT Cno FROM score WHERE Degree>85 GROUP BY Cno;
27.SELECT * FROM score WHERE Cno in (SELECT Cno FROM course JOIN teacher ON course.Tno=teacher.Tno AND teacher.Depart='计算机系');
28.SELECT Tname,Prof FROM teacher WHERE (Prof NOT in (SELECT t1.Prof FROM teacher t1 WHERE Depart='计算机系') AND Prof in (SELECT t2.Prof FROM teacher t2 WHERE Depart='电子工程系'))OR (Prof in (SELECT t1.Prof FROM teacher t1 WHERE Depart='计算机系') AND Prof NOT in (SELECT t2.Prof FROM teacher t2 WHERE Depart='电子工程系'));
29.select * from Score where Cno='3-105' and Degree >any(select Degree from Score where Cno='3-245')
30.score where cno='3-105' and degree>all(select degree from score where cno='3-245') order by degree desc
31.SELECT DISTINCT Sname NAME,Ssex SEX,Sbirthday Birthday FROM student UNION SELECT DISTINCT Tname NAME,Tsex SEX,Tbirthday Birthday FROM teacher;
32.SELECT Sname NAME,Ssex SEX,Sbirthday Birthday FROM student WHERE Ssex='女' UNION SELECT Tname NAME,Tsex SEX,Tbirthday Birthday FROM teacher WHERE Tsex='女';
33.SELECT * FROM score a WHERE a.Degree
34.SELECT Tname,Depart FROM teacher WHERE teacher.Tno in (SELECT Tno FROM course WHERE course.Cno in (SELECT Cno FROM score));
35.SELECT Tname,Depart FROM teacher WHERE teacher.Tno NOT in (SELECT Tno FROM course WHERE course.Cno in (SELECT Cno FROM score));
36.SELECT Class FROM student WHERE Ssex='男' GROUP BY Class HAVING COUNT(*)>1;
37.SELECT * FROM student WHERE Sname NOT LIKE "王%";
38.SELECT Sname 姓名,(SELECT YEAR(NOW())-YEAR(Sbirthday)) 年龄 FROM student;
39.SELECT MAX(Sbirthday) 最大, MIN(Sbirthday) 最小 FROM student
40.SELECT * FROM student ORDER BY Class DESC,(SELECT YEAR(NOW())-YEAR(Sbirthday)) DESC;
41.SELECT Tname, Cname FROM teacher, course WHERE teacher.Tsex='男' AND teacher.Tno=course.Tno;
42.SELECT * FROM score a WHERE a.Degree=(SELECT MAX(Degree) FROM score b WHERE a.Cno=b.Cno);
43.SELECT a.Sname FROM student a WHERE a.Ssex=(SELECT Ssex FROM student b WHERE b.Sname='李军');
44.SELECT a.Sname FROM student a WHERE a.Ssex=(SELECT Ssex FROM student b WHERE b.Sname='李军' AND a.Class=b.Class)
45.SELECT * FROM score WHERE (score.Sno in (SELECT Sno FROM student WHERE student.Ssex='男')) AND (score.Cno in (SELECT Cno FROM course WHERE course.Cname='计算机导论'));