2010-04-25 154 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