这比听起来更复杂。第一的:
select *
from a left join b on . . . ;
Run Code Online (Sandbox Code Playgroud)
和:
select *
from b right join a on . . . ;
Run Code Online (Sandbox Code Playgroud)
可能会产生在两个方面有所不同的结果集:
从集合论的角度来看,这些都不影响结果集的等价性。但它们可以产生实际效果。一般来说,如果您关心订购,则分别:
order by
.更重要的一点是,当存在多个连接时,left join
和right join
是不可互换的,因为无论类型如何,连接总是从左到右关联。
在下文中,我将省略这些on
条款。考虑:
from a left join b left join c
Run Code Online (Sandbox Code Playgroud)
您可能会认为右连接的等价物是:
from c right join b right join a
Run Code Online (Sandbox Code Playgroud)
但是,join
s 被分组,因此第一个被解释为:
from (a left join b) left join c
Run Code Online (Sandbox Code Playgroud)
第二个是:
from (c right join b) right join a
Run Code Online (Sandbox Code Playgroud)
但与 s 等效的right join
是:
from c right join (b right join a)
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,每一行都a
将是结果集的整数。但结果可能会有所不同,具体取决于三个表之间的重叠。