数据库实验(sql语句查询)

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;

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别管我啦就是说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值