2012-07-30 139 views
47

只是玩弄查詢和示例,以更好地理解連接。我注意到,在SQL Server 2008中,以下兩個查詢得到同樣的結果:全外連接與全連接

SELECT * FROM TableA 
FULL OUTER JOIN TableB 
ON TableA.name = TableB.name 

SELECT * FROM TableA 
FULL JOIN TableB 
ON TableA.name = TableB.name 

難道這些執行完全相同的動作,以產生相同的結果,否則我就碰上不同的結果在一個更復雜的例子?這只是可互換的術語嗎?

+0

是的,這兩個查詢在SQL Server 2008 R2中給出了相同的結果。 – CptSupermrkt 2012-07-30 03:05:07

回答

56

其實它們是一樣的。 LEFT OUTER JOINLEFT JOIN相同,而RIGHT OUTER JOINRIGHT JOIN相同。這是比較從INNER Join更多信息的方式。

有關詳細信息,請參閱此Wikipedia article

+2

完美,謝謝。我遇到的很多教程都是根據自己的風格使用這些教程,但沒有注意到它們是相同的。 – CptSupermrkt 2012-07-30 03:11:29

+1

我認爲你應該改正這一點。幾乎所有的DBMS都理解'OUTER'關鍵字。至少Postgres,Oracle,MySQL,SQLite,DB2甚至Access。其實我知道沒有不接受它的DBMS。 – 2013-05-11 16:46:20

+1

連接的可視化表示:http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins – 2013-11-12 00:30:47

20

微軟的SQL Server™2000使用這些SQL-92關鍵字外連接在指定FROM子句 :

  • LEFT OUTER JOIN或LEFT JOIN

  • RIGHT OUTER JOIN或RIGHT JOIN

  • FULL OUTER JOIN或FULL JOIN

MSDN

full outer joinfull join返回兩個表中的所有行,匹配了地方匹配就可以製備和在沒有匹配的行存在的地方放置NULL S中的行。

5

確實有些數據庫識別出OUTER關鍵字。有些不。 確認後,通常是可選關鍵字。 幾乎總是,FULL JOIN和FULL OUTER JOIN完全一樣。 (我想不出一個他們沒有的例子,其他人可以想到一個嗎?)

這可能會讓你想知道,「如果它沒有意義,它甚至會成爲一個關鍵字?」答案歸結爲編程風格。

在過去,程序員努力使自己的代碼儘可能緊湊。每個角色意味着更長的處理時間我們使用了1,2和3個字母變量。我們用了2位數的年份。我們消除了所有不必要的空白。有些人仍然這樣編程。這不再是處理時間。這更多的是關於快速編碼。

現代程序員正在學習使用更多的描述性變量,並將更多的註釋和文檔放入其代碼中。使用額外的單詞如OUTER,確保閱讀代碼的其他人可以更容易地理解它。將會有更少的歧義。這種風格對於將來必須維護代碼的人來說更具可讀性和友善性。