【发布时间】:2010-10-01 03:34:43
【问题描述】:
我试图了解连接在内部是如何工作的。以下两个查询的运行方式有什么区别?
For example
(A)
Select *
FROM TABLE1
FULL JOIN TABLE2 ON TABLE1.ID = TABLE2.ID
FULL JOIN TABLE3 ON TABLE1.ID = TABLE3.ID
And
(B)
Select *
FROM TABLE1
FULL JOIN TABLE2 ON TABLE1.ID = TABLE2.ID
FULL JOIN TABLE3 ON TABLE2.ID = TABLE3.ID
编辑:我在这里谈论的是 oracle。 考虑表 2 和表 3 中存在但表 1 中不存在的一些记录,查询 A 将为该记录提供两行,但 B 将仅提供一行。
【问题讨论】:
-
FULL 与 FULL OUTER 相同。 OUTER 是模棱两可的(是 LEFT、RIGHT 还是 FULL?) - 但大多数人会将其解释为 FULL。
-
全外连接返回两个表中的所有行,表中与连接条件不匹配的任何列都为 NULL。有点像 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 的组合。