SQL测验题
一、
现有关系模式如下:
学生(学号,姓名,性别);课程(课程号,课程名,教师姓名);
选课表(课程号,学号,成绩)
1. 检索年龄大于20岁的男生的学号和姓名。
1 | select 学号, 姓名 |
2. 检索选修了姓刘的老师所教授的课程的女学生的姓名。
1 | select 姓名 |
3. 检索李想同学不学的课程的课程号和课程名。
1 | select 课程号, 课程名 |
4. 检索至少选修了两门课程的学生的学号。
1 | select 学号 |
5. 求刘老师所教授课程的每门课的平均成绩。
1 | select 课程.课程号, avg(选课表.成绩) |
6. 假设不存在重修的情况,请统计每门课的选修人数(选课人数超过两人的课程才统计)。要求显示课程号和人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
1 | select 课程.课程号, count(选课表.学号) |
7. 求年龄大于所有女生年龄的男生的姓名和年龄。
1 | select 姓名, 年龄 |
8. 假定不存在重修的情况,求选修了所有课程的学生的学号姓名。(可以不用相关子查询做)
1 | select 学生.姓名, 学生.学号 |
9. 查询重修次数在2次以上的学生学号,课程号,重修次数
1 | select 学生.姓名, 学生.学号, count(*) as 重修次数 |
10. 查询重修学生人数最多的课程号,课程名,教师姓名
1 | select 课程.课程号, 课程.课程名, 课程.教师姓名 |
二、
学生(学号,姓名,年龄,性别,班级)
课程(课程号,课程名,先修课程号,学分)注意:此表的主键是(课程号)
选课(学号,课程号,教师号,成绩)
教师(教师号,教师名称)
查找李力的所有不及格的课程名称和成绩,按成绩降序排列
1
2
3
4select 选课.课程名, 选课.成绩
from 学生, 选课
where 学生.学号 = 选课.学号 and 学生.姓名 = '李力' and 选课.成绩 < 60
order by 选课.成绩 desc;列出每门课的学分,选修的学生人数,及学生成绩的平均分
1
2
3
4select 课程.学分, count(学生.学号) as 学生人数, avg(选课.成绩)
from 学生, 课程, 选课
where 学生.学号 = 选课.学号 and 选课.课程号 = 课程.课程号
group by 课程.课程号;选出所修课程总学分在10分以下的学生(注:不及格的课程没有学分)。
1
2
3
4
5select 学生.学号, 学生.姓名
from 学生, 课程, 选课
where 学生.学号 = 选课.学号 and 选课.课程号 = 课程.课程号 and 选课.成绩 >= 60
group by 学生.学号
having sum(课程.学分) < 10;选出选课门数最多的学生学号及选课数量
1
2
3
4
5
6
7
8
9
10select 学生.学号, count(*) as 选课数量
from 学生, 课程, 选课
where 学生.学号 = 选课.学号 and 选课.课程号 = 课程.课程号
group by 学生.学号
having count(*) >= all(
select count(*)
from 学生, 课程, 选课
where 学生.学号 = 选课.学号 and 选课.课程号 = 课程.课程号
group by 学生.学号
)列出每门课的最高分及获得该分数的学生
1
2
3
4
5select 选课.成绩, 学生.学号, 学生.姓名
from 学生, 选课
where 学生.学号 = 选课.学号
group by 选课.课程号
having 选课.成绩 = max(选课.成绩);选出物理课得分比所有男学生的物理课平均分高的学生姓名
1
2
3
4
5
6
7
8
9select 学生.姓名
from 学生, 课程, 选课
where 学生.学号 = 选课.学号 and 选课.课程号 = 课程.课程号 and 课程名 = '物理'
having 选课.成绩 > (
select avg(选课.成绩)
from 学生, 课程, 选课
where 学生.学号 = 选课.学号 and 选课.课程号 = 课程.课程号 and 课程名 = '物理'
and 学生.性别 = '男'
);选出修习过物理课的直接先修课的学生
1
2
3
4
5
6
7
8select 学生.学号, 学生.姓名
from 学生, 课程, 选课
where 学生.学号 = 选课.学号 and 选课.课程号 = 课程.课程号
and 课程.课程号 = (
select 课程.先修课程号
from 课程
where 课程.课程名 = '物理'
);选出有两门以上先修课的课程(包括直接先修课、间接先修课)(用课程表)
1 | select * |
课本习题, P130, 5
1.找出所有供应商的姓名和所在城市
1 | select sname, city |
2.找出所有零件的名称、颜色、重量
1 | select pname, color, weight |
3.找出使用供应商S1
所供应零件的工程号码
1 | select jno |
4.找出工程项目J2
使用的各种零件的名称及其数量
1 | select p.pname, spj.qty |
5.找出上海厂商供应的所有零件号码
1 | select distinct pno |
6.找出使用上海产的零件的工程名称
1 | select jname |
7.找出没有使用天津产的零件的工程号码
1 | select jno |