学生选课数据库SQL语句练习题(详细分解答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、设有一数据库,包括四个表:学生表(Student)、课程表
(Course)、成绩表(Score)以及教师信息表(Teacher)。
四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。
表1-1数据库的表结构
表(一)Student
属性名数据类
型可否为
空
含义
Sno Char(3) 否学号(主
键)Sname Char(8) 否学生姓名Ssex Char(2) 否学生性别Sbirthday datetime 可学生出生年
月
Class Char(5) 可学生所在班
级
表(二)Course
属性名数据类型可否为
空
含义Cno Char(5) 否课程号(主
键)Cname Varchar(10) 否课程名称Tno Char(3) 否教师编号
(外键)
表(三)Score
属性名数据类型可否为
空
含义Sno Char(3) 否学号(外
键)
Cno Char(5) 否课程号(外
键)Degree Decimal(4,1) 可成绩
主码:Sno+ Cno
表(四)Teacher
属性名数据类型可否为
含义
空
Tno Char(3) 否教师编号
(主键)Tname Char(4) 否教师姓名Tsex Char(2) 否教师性别Tbirthday datetime 可教师出生年
月
Prof Char(6) 可职称Depart Varchar(10) 否教师所在部
门
表1-2数据库中的数据
表(一)Student
Sno Sname Ssex Sbirthday class
108 曾华男1977-09-
95033
01
105 匡明男1975-10-
95031
02
107 王丽女1976-01-
95033
23
95033
101 李军男1976-02-
20
95031
109 王芳女1975-02-
10
95031
103 陆君男1974-06-
03
表(二)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列。 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,degree desc;
-- 9、查询“95031”班的学生人数。
select class,count(*) as 学生人数 from student
group by class having class='95031';
-- 10、查询Score表中的最高分的学生学号和课程号。(子查询或者排序)
select sno,cno,degree,
(select max(degree) from score) as maxscore--计算最高分
from score where degree= (select max(degree) from score);
-- 11、查询‘3-105’号课程的平均分。
select avg(degree) as avgdegree
from score group by cno having cno='3-105';
-- 12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
select avg(degree) as avgdegree from score group by cno --按照课程分组取平均值
having cno= (select cno from score group by cno having count(*)>=5)--至少有5名学生选修的课程
and cno like '3%';--以3开头的课程
-- 13、查询最低分大于70,最高分小于90的Sno列。