我有时读到它相当于写“a left join b”和“b right jojn a”。我以为我会理解这一点,但我在一本书上看到情况并非如此。它说结果元组是相同的,但它们的顺序可能不同。我找不到对此的解释。我也试图在我的本地 MySQL 服务器上按顺序重现这种差异,但我做不到。唯一的区别似乎是属性的顺序。任何人都可以向我解释何时或为什么会出现元组顺序差异吗?
这比听起来要复杂得多。第一:
select *
from a left join b on . . . ;
和:
select *
from b right join a on . . . ;
可能会产生两种不同的结果集:
从集合论的角度来看,这些都不影响结果集的等价性。但它们可能会产生实际效果。一般来说,如果你关心排序,那么分别:
更重要的一点是,left join
和 right join
在有多个 join 时是不可互换的,因为无论类型如何,join 总是从左到右关联。
在下文中,我将省略 on
子句。考虑:
from a left join b left join c
你会认为与 right join 等价的是:
from c right join b right join a
但是,join
是分组的,因此第一个被解释为:
from (a left join b) left join c
第二个是:
from (c right join b) right join a
但是与 right join
s 等价的是:
from c right join (b right join a)
在这两种情况下,a
中的每一行都将是结果集。但结果可能会因三个表之间的重叠而有所不同。
我是一名优秀的程序员,十分优秀!