SQL-连接3个表,但显示中间表中缺少数据的位置

SQL-连接3个表,但显示中间表中缺少数据的位置,sql,Sql,鉴于一些学生: 考虑到一些考试: 每个学生最终都会在每次考试中获得分数,但我们正在进行考试,有些分数还不存在: MarkId StudentId ExamId Grade ----------------------------- 1 1 1 B 2 1 2 A 3 2 1 A 我如何查询中间的分数表以显示所有现有的分数,但显示学生尚未参加考试的空行 我想要的结果应该是这样的: 我想我应

鉴于一些学生:

考虑到一些考试:

每个学生最终都会在每次考试中获得分数,但我们正在进行考试,有些分数还不存在:

MarkId StudentId ExamId Grade
-----------------------------
1      1         1      B
2      1         2      A
3      2         1      A
我如何查询中间的分数表以显示所有现有的分数,但显示学生尚未参加考试的空行

我想要的结果应该是这样的:

我想我应该可以通过右连接来实现这一点,但3个连接总是会丢弃空值。

使用交叉连接来生成行,使用左连接来引入分数:

select s.*, e.*, m.grade
from students s cross join
     exams e left join
     marks m
     on m.studentid = s.studentid and m.examid = e.examid;
使用交叉连接生成行,使用左连接引入坡度:

select s.*, e.*, m.grade
from students s cross join
     exams e left join
     marks m
     on m.studentid = s.studentid and m.examid = e.examid;

样本数据最好以如下方式表示。有关如何创建美观的表的一些提示,请参阅。示例数据最好显示为。有关如何创建美观的表格的一些提示,请参见。
select s.*, e.*, m.grade
from students s cross join
     exams e left join
     marks m
     on m.studentid = s.studentid and m.examid = e.examid;