有差異加入
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.
有差異加入
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.
INNER JOIN
是ANSI(SQL-92)語法,你在第一個上使用。它通常被認爲更具可讀性,尤其是當您加入大量表格時。
WHERE syntax
(SQL-89)更多的是面向關係模型。 JOIN'ed的兩個表的結果是應用了過濾器的表的笛卡爾積,該過濾器僅選擇具有匹配的連接列的那些行。
用WHERE語法來看這很容易。
我寧願去上ANSI
類型的連接,因爲如果一些如何忽略ON
條款,斷開,而舊的類型,如果你省略對where
子句條件不會產生一個錯誤信息,從而加入的生成錯誤它會產生笛卡爾產品。
+ 1的很好的解釋,如果你可以添加指向ANSI(SQL-92)和SQL-89文檔的鏈接) – Habib
「加入」的版本已經有大約20年,是首選,因爲它清楚地標識用於謂詞該連接與用於篩選結果的連接相反。
如果與left join
一起使用(如果table_b中沒有匹配的行,仍然獲得table_a的行),它也允許外連接。
的「逗號」版本不允許外部聯接(你不會得到表-A的行如果沒有在表-B匹配行)
這兩個例子是相同的。兩者都執行INNER JOIN操作(即使它僅在第二個示例中爲JOIN),該操作基本上返回包含與ON子句相關的匹配結果的所有行。
我的猜測是JOIN和INNER JOIN操作只是稍微快一點,因爲它們是爲特定目的而設計的,而SELECT語句可以修改得更多。
第二個仍然被認爲是「加入」,但它是老派版本 – Bohemian