当前位置: 代码迷 >> 综合 >> SQL 4
  详细解决方案

SQL 4

热度:31   发布时间:2024-01-29 20:39:37.0
  • 查询课程编号为“0001”的课程比“0002”的课程成绩高的所有学生的学号
select a.学号
from (select 学号,成绩 from score where 课程号='0001') as a inner join 
(select 学号,成绩 from score where 课程号='0002') as b on a.学号=b.学号
where a.成绩=b.成绩

 原答案:

select a.学号
from (select 学号,成绩 from score where 课程号='0001') as a inner join 
(select 学号,成绩 from score where 课程号='0002') as b on a.学号=b.学号
inner join student as c on c.学号=a.学号
where a.成绩=b.成绩

原答案修改后的:

select a.学号
from (select 学号,成绩 from score where 课程号='0001') as a inner join 
(select 学号,成绩 from score where 课程号='0002') as b on a.学号=b.学号
where a.成绩=b.成绩
  • 查询学过编号为“0001”的课程并且也学过编号为“0002”的课程的学生的学号、姓名
select b.学号,b.姓名
from (select 学号,课程号 from score where 课程号='0001') as a 
inner join student as b on a.学号=b.学号
where a.学号 in (select 学号 from score where 课程号='0002')
  • 查询学过“孟扎扎”老师所教的所有课的同学的学号、姓名
select 学号,姓名
from student
where 学号 in (
select 学号 from score where 课程号 in (
select 课程号 from course where 教师号 in (
select 教师号 from teacher where 教师姓名='孟扎扎')
)
)

或

select a.学号,a.姓名
from student as a inner join score as b on a.学号=b.学号
inner join course as c on b.课程号=c.课程号
inner join teacher as d on c.教师号=d.教师号
where d.教师姓名='孟扎扎'
  • 查询没学过"孟扎扎"老师讲授的任一门课程的学生姓名
select distinct 姓名
from student
where 学号 not in (
select a.学号
from student as a inner join score as b on a.学号=b.学号
inner join course as c on b.课程号=c.课程号
inner join teacher as d on c.教师号=d.教师号
where d.教师姓名='孟扎扎')
  • 查询选修“孟扎扎”老师所授课程的学生中成绩最高的学生姓名及其成绩
select a.姓名,b.成绩
from student as a inner join score as b on a.学号=b.学号
inner join course as c on b.课程号=c.课程号
inner join teacher as d on c.教师号=d.教师号
where d.教师姓名='孟扎扎'
order by b.成绩 desc
limit 1
  • 查询至少有一门课与学号为“0001”的学生所学课程相同的学生的学号和姓名
select distinct a.学号,a.姓名
from student as a inner join score as b on a.学号=b.学号
where b.课程号 in (
select 课程号 from score
where 学号='0001') 
having 学号!='0001'

 

 

 

 

 

 

  相关解决方案