SQL JOIN 方法:USING、ON 和 WHERE 的效能和語法差異
SQL 提供多種連接表的選項:USING、ON 和 WHERE。雖然這些選項的功能相似,但對它們的性能和語法含義的誤解可能會出現。本文探討了這些連結方法之間的差異。
性能方面
與一般看法相反,這三種連結方法之間沒有明顯的表現差異。所有三種方法都會產生相同的最佳化查詢計劃。
語法和語意
ANSI 語法:
USING 語法:
「join the where」(隱式 INNER JOIN)的歧義性
使用 WHERE 子句指定連線條件可能會導致歧義,尤其是在外部連線類型中。這個問題源自於 SQL Server 中的邏輯查詢處理順序,其中 FROM 在 WHERE 之前進行評估。 「join the where」可能會無意中創建笛卡爾積或產生意外結果。
語法歧義:
以下兩個查詢說明了在 WHERE 子句中混合隱式內部連接與 FROM 子句中明確外部連接時可能出現的語法歧義:
<code class="language-sql">FROM T1, T2, T3 WHERE T1.ID = T2.ID AND T1.foo = 'bar' AND T2.fish = 42 FROM T1 INNER JOIN T2 ON T1.ID = T2.ID INNER JOIN T3 ON T1.ID = T3.ID WHERE T1.foo = 'bar' AND T2.fish = 42</code>
歧義源自於無法清楚地確定哪些連接是外部連接,哪些是內部連接。
建議:
為了清晰、一致性和與現代 SQL 標準的兼容性,建議:
以上是SQL 連線:USING、ON 和 WHERE 之間的效能和語法差異是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!