2010-04-25 122 views
-1

如果内部联接可以被看作是一个交叉连接,然后让满足条件的记录,那么LEFT OUTER JOIN可以被看作是,再加上左表中不符合条件的一个记录。Inner Join,Cross Join和Left Outer Join之间有什么区别?

换句话说,它不是一个交叉连接,在左边的记录上“很容易”(即使条件不满足),因为那么左边的记录可以出现多次(与记录的次数一样多在右表中)。

因此,LEFT OUTER JOIN是满足条件的记录的交叉JOIN,再加上来自LEFT TABLE的不满足条件的ONE记录?

+5

我的大脑是相互连接的...等等,这是一个问题吗? – 2010-04-25 11:34:06

回答

1

我不认为这是正确的说左外连接是:“用记录satsifying的条件和左表不satisy条件的一个记录的交叉连接”。

内部联接未经条件是作为交叉连接是相同的。 x上的内部连接与x中的交叉连接相同。但更喜欢第一个,因为它更明确,更难以弄错。

然而与外连接,你并不总是得到行“不符合条件”。左外之间的差异加入和内部联接是:

  • 内连接:如果连接条件的左表中的行未能在右表中的每一行,你没有得到该行。
  • 外连接:如果在左表中的行连接条件未能在右表中的每一行,你从左边的表中的行与空值在右表中的列。

你没有得到匹配的行和没有的行 - 你得到第一种情况或第二种情况。你的陈述似乎表明你可以得到两者。

+0

HM,我想我的意思,当左边表中的记录能够满足条件,那么这些进入结果表,但是当在左表中的记录没有,那么它得到一个行(与其他表的字段为NULL)。所以它可能是/或者不是两个...... – 2010-04-25 12:20:13

+0

@Jin Lin:这个陈述不完全正确:“当左表上的记录能够满足条件时,那么这些记录就会进入结果表”。你需要左边的一排和右边的一排*一起满足条件。 – 2010-04-25 12:27:19

+0

hm ...满足条件:条件几乎总是有一个值形成LEFT表和一个来自RIGHT表,不是吗?即使它是一个自加入,他们仍然可以被视为左右桌面...除非您正在查看薪水> 10000的联合,那么它不涉及右桌子的字段。 – 2010-04-25 12:47:51