2012-09-10 62 views
4

差異加入

SELECT * 
FROM TABLE_A a 
JOIN TABLE_B b 
    ON a.propertyA = b.propertyA   

和查詢之間的任何差別

SELECT * from TABLE_A a, TABLE_B b where a.propertyA=b.propertyA. 
+1

第二個仍然被認爲是「加入」,但它是老派版本 – Bohemian

回答

5

INNER JOIN是ANSI(SQL-92)語法,你在第一個上使用。它通常被認爲更具可讀性,尤其是當您加入大量表格時。

WHERE syntaxSQL-89)更多的是面向關係模型。 JOIN'ed的兩個表的結果是應用了過濾器的表的笛卡爾積,該過濾器僅選擇具有匹配的連接列的那些行。

用WHERE語法來看這很容易。

我寧願去上ANSI類型的連接,因爲如果一些如何忽略ON條款,斷開,而舊的類型,如果你省略對where子句條件不會產生一個錯誤信息,從而加入的生成錯誤它會產生笛卡爾產品。

+0

+ 1的很好的解釋,如果你可以添加指向ANSI(SQL-92)和SQL-89文檔的鏈接) – Habib

0

「加入」的版本已經有大約20年,是首選,因爲它清楚地標識用於謂詞該連接與用於篩選結果的連接相反。
如果與left join一起使用(如果table_b中沒有匹配的行,仍然獲得table_a的行),它也允許外連接。

的「逗號」版本不允許外部聯接(你不會得到表-A的行如果沒有在表-B匹配行)

2

這兩個例子是相同的。兩者都執行INNER JOIN操作(即使它僅在第二個示例中爲JOIN),該操作基本上返回包含與ON子句相關的匹配結果的所有行。

我的猜測是JOIN和INNER JOIN操作只是稍微快一點,因爲它們是爲特定目的而設計的,而SELECT語句可以修改得更多。