我看到名爲LEFT OUTER JOIN或RIGHT OUTER JOIN的連接。在一些地方,我看到了LEFT JOIN或RIGHT JOIN。我對此感到困惑。左外連接和左連接相同嗎?
2天前我發佈了question,但我無法理解解決方案提供的鏈接。
這些類型的連接都是相同的,還是兩者之間有一些區別?
我看到名爲LEFT OUTER JOIN或RIGHT OUTER JOIN的連接。在一些地方,我看到了LEFT JOIN或RIGHT JOIN。我對此感到困惑。左外連接和左連接相同嗎?
2天前我發佈了question,但我無法理解解決方案提供的鏈接。
這些類型的連接都是相同的,還是兩者之間有一些區別?
在MySQL語法,LEFT OUTER JOIN
和LEFT 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
可能無效。
他們報的第一個鏈接給你:
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
。
如果你看一下手冊頁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是可選的。
@Luv - 現在最後一行對你的格式沒有意義! – 2013-03-15 06:23:05
它們是相同的。 – EmCo 2013-03-15 05:57:07
'LEFT JOIN'與'LEFT OUTER JOIN'相同。 'OUTER'關鍵字是*可選*。 – 2013-03-15 05:57:22
@JW。我看到了你所建議的鏈接。這是非常有用的,但它仍然沒有完成我所有的疑惑。 http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html – PSR 2013-03-15 05:58:33