1.求选修了老师“王刚”开课课程且成绩在90分以上的学生姓名、课程名称和成绩;(姓名,课程名,成绩)
SELECT 姓名,
课程名,
成绩
FROM 学习,
课程,
学生,
教师
WHERE 学习 . 学号=学生 . 学号
AND 学习 . 课程号=课程 . 课程号
AND 学习 . 教师号=教师 . 教师号
AND 教师 . 教师名="王刚"
AND 学习 . 成绩>= 90;
2.求选修了“王刚”老师所授全部课程的学生姓名和学院名称;(姓名,学院名称)
SELECT 姓名,学院名称
FROM 学生 join 学院 on 学生 . 学院代码=学院 . 学院代码
where 学生 . 学号 IN ( SELECT DISTINCT 学号
FROM 学生
WHERE NOT EXISTS ( SELECT *
FROM 教师 join 授课 on 教师 . 教师号=授课 . 教师号
where 教师 . 教师名="王刚"
AND NOT EXISTS ( SELECT *
FROM 学习
WHERE 学号 = 学生. 学号
AND 课程号=授课 . 课程号 ) ) );
3.求没有选修课程“软件工程”的学生学号和姓名;(学生学号,姓名)
SELECT 学号 as"学生学号", 姓名
FROM 学生
WHERE 学号 NOT IN (
SELECT 学号
FROM 学习,课程
WHERE 学习.课程号 = 课程.课程号
AND 课程名 = "软件工程");
4.求至少选修了两门课程的学生学号;(学号)
SELECT 学号
FROM 学习
group by 学号
having count(课程号)>=2;
5.求课程“经济学”不及格学生姓名和考试成绩;(姓名,成绩)
SELECT 姓名,成绩
FROM 学生 join 学习 on 学生.学号=学习.学号
join 课程 on 学习.课程号=课程.课程号
where 课程名="经济学" and
成绩<=60;
6.求至少选修了与学号“T06” 同学选修的课程相同的学生学号;(学号)
SELECT DISTINCT 学号
FROM 学习
where not exists
(select *
from 学习 as f
where f.学号="T06"
and not exists (
select *
from 学习 as s
where s.课程号=f.课程号
and 学习.学号=s.学号));
7.求至少选修了“C3,C4”两门课程的学生姓名和学院名称;(姓名,学院名称)
SELECT 姓名,学院名称
FROM 学院 join 学生 on 学生 . 学院代码=学院 . 学院代码
join 学习 on 学生.学号=学习.学号
where 课程号="C3"
and 学生.学号 in
(select 学号
from 学习
where 课程号="C4");
8.查询“王石”同学没有选修的课程号和课程名; (课程号,课程名)
SELECT 课程号,课程名
FROM 课程
where 课程号 not in
(select 课程号
from 学习 join 学生 on 学习.学号=学生.学号
where 姓名="王石");
9.查询没有被任何学生选修的课程的课程号;(课程号)
SELECT 课程号
FROM 课程
where 课程号 not in
(select 课程号
from 学习 );
10.求选修了全部课程的学生姓名;(姓名)
法一:
SELECT 姓名
FROM 学生
where 学号 in
(select 学号
from 学习
group by 学号
having count(课程号)=
(select count(课程号)
from 课程));
法二:
SELECT 姓名
FROM 学生
WHERE NOT EXISTS ( SELECT *
FROM 课程
WHERE 课程号 NOT IN ( SELECT 课程号
FROM 学习
WHERE 学号 = 学生 . 学号 ) );
11.查询各学院课程“经济学”的平均分,并按照成绩从高到低的顺序排列;(学院名称,平均分)
select 学院名称,avg(成绩) as "平均分"
from 学习 join 学生 on 学习.学号=学生.学号
join 学院 on 学生.学院代码=学院.学院代码
where 课程号 in
(select 课程号
from 课程
where 课程名="经济学")
group by 学院名称
order by avg(成绩) desc;
12.查询选修课程“经济学”的学生姓名和所在院系,结果按各院系排列,同时成绩从高到低排列;(姓名,学院名称,成绩)
select 姓名,学院名称,成绩
from 学习 join 学生 on 学习.学号=学生.学号
join 学院 on 学生.学院代码=学院.学院代码
where 课程号 in
(select 课程号
from 课程
where 课程名="经济学")
order by 学院名称,成绩 desc;
13.求学时在30-45之间(含30和45)的课程的课程号和课程名称及授课教师;(课程号,课程名,教师姓名)
select 课程.课程号,课程名,教师名 as"教师姓名"
from 课程 join 授课 on 课程.课程号=授课.课程号
join 教师 on 授课.教师号=教师.教师号
where 学时 >=30 and
学时 <=45;
14.检索选修课程“经济学”的最高分学生的姓名;(姓名)
select 姓名
from 学生 join 学习 on 学生.学号=学习.学号
where 成绩=
(select max(成绩)
from 学习
where 课程号 in
(select 课程号
from 课程
where 课程名="经济学"));
15.查询选课人数超过5人的课程的课程号及课程名;(课程号,课程名)
select 课程.课程号,课程名
from 课程 join 学习 on 课程.课程号=学习.课程号
group by 课程.课程号
having count(学号)>5;