2013-03-15 55 views
38

我看到名爲LEFT OUTER JOIN或RIGHT OUTER JOIN的連接。在一些地方,我看到了LEFT JOIN或RIGHT JOIN。我對此感到困惑。左外連接和左連接相同嗎?

2天前我發佈了question,但我無法理解解決方案提供的鏈接。

這些類型的連接都是相同的,還是兩者之間有一些區別?

+10

它們是相同的。 – EmCo 2013-03-15 05:57:07

+5

'LEFT JOIN'與'LEFT OUTER JOIN'相同。 'OUTER'關鍵字是*可選*。 – 2013-03-15 05:57:22

+0

@JW。我看到了你所建議的鏈接。這是非常有用的,但它仍然沒有完成我所有的疑惑。 http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html – PSR 2013-03-15 05:58:33

回答

2

在MySQL語法,LEFT OUTER JOINLEFT JOIN是相同的:(來自http://dev.mysql.com/doc/refman/5.0/en/join.html

| table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition 
| table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor 

注意,OUTER關鍵字是可選爲LEFT/RIGHT JOIN。

LEFT和RIGHT連接都是外連接。我相信有一些SQL可能需要OUTER關鍵字,但MySQL不。也就是說,有時LEFT JOIN可能無效。

18

他們報的第一個鏈接給你:

INNER JOIN:當有兩個表在比賽中返回行。

LEFT JOIN/LEFT OUTER JOIN:即使右表中沒有匹配,也會返回左表中的所有行。

RIGHT JOIN/RIGHT OUTER JOIN:即使左表中沒有匹配,也會返回右表中的所有行。

FULL JOIN/FULL OUTER JOIN/OUTER JOIN:當其中一個表中存在匹配項時返回行。

SELF JOIN:用於將表連接到自身,就像該表是兩個表一樣,臨時重命名SQL語句中的至少一個表。

CARTESIAN JOIN:從兩個或多個連接表中返回記錄集的笛卡爾乘積。

self join其實不是special join。它只是反映了你可以自己加入表格的事實。這樣做,您必須將其別名,以解決它在同一陳述中出現多次的事實。

cartesian join可以被認爲是沒有限制條件的inner join。或者您可以將inner join視爲具有附加限制(連接條件)的cartesian join

3

如果你看一下手冊頁JOIN您將看到以下行:

join_table: 

    table_reference [INNER | CROSS] JOIN table_factor [join_condition] 

    | table_reference STRAIGHT_JOIN table_factor 

    | table_reference STRAIGHT_JOIN table_factor ON conditional_expr 

| table_reference {LEFT | RIGHT} [OUTER] JOIN table_reference join_condition

| table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor 

粗線清楚地表明,該關鍵字OUTER是可選的。

+0

@Luv - 現在最後一行對你的格式沒有意義! – 2013-03-15 06:23:05

1

我在SQL Server中工作,按我的使用情況和經驗,有LEFT JOINLEFT OUTER JOIN之間絕對沒有區別。 RIGHT JOINRIGHT OUTER JOIN也是如此。當您在SQL Server中使用LEFT JOIN關鍵字時,它僅表示LEFT OUTER JOIN。 因此,根據我的意見,它的所有數據庫引擎的通用規則是相同的。

see herehere