Sql 针对所有数据的2个表使用什么连接

Sql 针对所有数据的2个表使用什么连接,sql,join,Sql,Join,嗨,我想知道如果我想将两个表连接在一起,我会使用什么连接。我现在有一份所有学生的名单,一个班25名学生,另一张表只显示了其中7名学生的考试成绩 我想要的是有测试结果的和没有测试结果的1:1加入,我想在下面展示它们,所以我总共有20条记录 如果有人能建议我如何做到这一点,请 提前感谢。您正在寻找左外部联接或完全外部联接 左侧外部联接将显示所有学生及其测试(如果有) select * from Students as s left outer join Tests as t on s.S

嗨,我想知道如果我想将两个表连接在一起,我会使用什么连接。我现在有一份所有学生的名单,一个班25名学生,另一张表只显示了其中7名学生的考试成绩

我想要的是有测试结果的和没有测试结果的1:1加入,我想在下面展示它们,所以我总共有20条记录

如果有人能建议我如何做到这一点,请


提前感谢。

您正在寻找
左外部联接
完全外部联接

左侧外部联接
将显示所有学生及其测试(如果有)

select *
from Students as s
  left outer join Tests as t
    on s.StudentId = t.StudentId
full outer join
将显示所有学生及其测试(如果他们有),以及测试(即使他们没有学生)

select *
from Students as s
  full outer join Tests as t
    on s.StudentId = t.StudentId

听起来你想要一个外部连接

在本例中,我们假设有一个名为
student
的表,其中包含一个名为
id
的列,该列是唯一(或主)键

我们还将假设另一个名为
test\u result
的表包含一个名为
student\u id
的列,该列是引用
student
id
列的外键

出于演示目的,我们将为这些表中可能出现的其他列命名,
name
score

  SELECT s.id 
       , s.name 
       , r.score
    FROM student s
    LEFT
    JOIN test_result r
      ON r.student_id = s.id
   ORDER
      BY r.student_id IS NULL
       , s.score DESC
       , s.id
请注意,如果
student\u id
test\u result
中不是唯一的,则可能会返回与
student
中的一行匹配的多行

要从每个
学生的
测试结果
返回(最多)一行,我们可以使用内联视图

  SELECT s.id 
       , s.name 
       , r.score
    FROM student s
    LEFT
    JOIN ( SELECT t.student_id
                , MAX(t.score) AS score
             FROM test_result t
            GROUP BY t.student_id
         ) r
      ON r.student_id = s.id
   ORDER
      BY r.student_id IS NULL
       , s.score DESC
       , s.id
ORDER BY子句中的表达式旨在首先返回
测试结果中有匹配行的学生,然后返回没有匹配行的学生


这只是一个演示,很可能排除了一些重要的标准,例如应该为哪个测试返回分数。但是没有一个示例模式和一些示例数据,我们只是猜测。

你有25个学生,想要20张记录?请参考:谢谢各位,我会尝试一下,让你们知道我的进展如何。