Sql 如何从三个表中提取行

Sql 如何从三个表中提取行,sql,Sql,我知道问这个问题是不合适的 学生表-ID、姓名、GPA 课程表-ID、标题、学期 学生班级表-学生ID、班级ID、学生等级 从该表结构中,如何提取参加class.title='MATH101'和class.sement='FALL2018'课程的学生姓名 没有太多的研究,我不得不问这个问题。我如何开始呢?Student\u Class是一个连接表,它实现了Student和Class之间的多对多关系。所以它只需要在Student\u id上用Student加入Student\u Class,在Cl

我知道问这个问题是不合适的

学生表-ID、姓名、GPA

课程表-ID、标题、学期

学生班级表-学生ID、班级ID、学生等级

从该表结构中,如何提取参加class.title='MATH101'和class.sement='FALL2018'课程的学生姓名


没有太多的研究,我不得不问这个问题。我如何开始呢?

Student\u Class
是一个连接表,它实现了
Student
Class
之间的多对多关系。所以它只需要在
Student\u id
上用
Student
加入
Student\u Class
,在
Class\u id
上用
Class
加入
Student\u Class

select s.name
from Student s inner join Student_Class cs on s.id = cs.student_id
inner join Class c on cs.class_id = c.id
where c.title = ‘MATH101’ and c.semester = ‘FALL2018’.

要选择学生姓名,请从学生表中选择。你只想考虑2018秋季参加数学的学生,因此添加一个WHERE子句限制学生。

这可以通过多种方式实现。一种方法是

select name
from students
where id in
(
  select student_id 
  from student_class
  where class_id = 
  (
    select id
    from class
    where title = 'MATH101'
    and semester = 'FALL2018'
  )
)
order by name;
另一个是

select name
from students s
where exists
(
  select null
  from student_class sc
  join class c on c.id = sc.class_id
  where sc.student_id = s.id
  and c.title = 'MATH101'
  and c.semester = 'FALL2018'
)
order by name;

提示:
加入
WHERE
。是的,我知道join和WHERE,但如何操作三个表对我来说很难。如果你已经知道如何连接,很难理解你到底有什么问题。我猜问题是一个家庭作业,因此我认为完整的答案对OP没有帮助,谁需要学习如何学习。这不是一个家庭作业,我不知道情况,这对我理解你的观点非常关键。这段代码可以回答这个问题,而不是c.id=cs.Student\u id上的内部连接Student\u Class cs,而是c.id=cs.Class\u id上的内部连接Student\u Class cs,提供有关此代码为什么和/或如何回答此问题的其他上下文,可以提高其长期价值。非常感谢