use*_*558 5 sql sql-server join left-join right-join
在外连接上(在这种情况下让我们采用左外连接)如何在右侧表上添加过滤器?
SELECT s.id, i.name FROM Student s
LEFT OUTER JOIN Student_Instructor i
ON s.student_id=i.student_id
AND i.name='John'
Run Code Online (Sandbox Code Playgroud)
我理解如果过滤器在Student桌面上,它将更像是"首先获取名称= John的所有行并加入表格".
但是我不确定如果过滤器在右侧的表(Student_Instructor)上是否是这种情况.如何i.name='John'解释过滤器?
谢谢
小智 9
应该是相同的:
SELECT s.id FROM Student s
LEFT OUTER JOIN (Select * from Student_Instructor where name='John' ) i
ON s.student_id=i.student_id
Run Code Online (Sandbox Code Playgroud)
无论如何,所有行都将从左表返回。在左连接的情况下,如果不满足过滤器,则从右表返回的所有数据将显示为空。就您而言,所有学生都会出现在您的结果中。如果学生没有导师,i.name 将为空。
由于您只从左表中选择一列,因此您的联接几乎没有用处。我还会将 i.name 添加到您的选择中,以便您可以看到结果
对于内部联接,只有满足联接过滤器时才会返回行。