現代SQL語法:LEFT JOIN與FROM子句中多個表格的選擇
SQL提供了兩種不同的表連接語法:(1) 在FROM子句中列出所有表,並使用WHERE子句指定連接條件;(2) 使用LEFT JOIN和INNER JOIN語法。雖然大多數SQL方言都接受這兩種語法,但後者更可取,尤其是在執行內連接時。
傳統語法:外連接的歧義性
傳統語法(在FROM子句中列出表格)在同一查詢中同時使用INNER JOIN和OUTER JOIN時容易產生歧義。考慮以下範例:
<code class="language-sql">SELECT * FROM Company, Department, Employee WHERE Company.ID *= Department.CompanyID AND Department.ID = Employee.DepartmentID</code>
此查詢旨在檢索公司及其部門和員工,包括沒有部門的公司。但是,當WHERE子句同時指定內連接和外連接時,就會出現歧義。根據查詢優化器的邏輯和資料庫引擎設置,查詢可能會排除缺少部門的公司,從而導致結果不正確。
現代語法:清晰度和可控制性
使用LEFT JOIN和INNER JOIN的現代語法消除了這種歧義。透過在一行中指定連接條件,它提供了對錶匹配方式的明確控制。在上述範例中,使用現代語法可以解決此問題:
<code class="language-sql">SELECT * FROM Company LEFT JOIN ( Department INNER JOIN Employee ON Department.ID = Employee.DepartmentID ) ON Company.ID = Department.CompanyID</code>
在上面的查詢中:
其他優勢
除了消除歧義之外,現代語法還有其他優點:
傳統文法的棄用
由於現代語法的優勢,一些廠商(例如Microsoft)在其資料庫軟體的較新版本中已棄用傳統的外連接語法(使用WHERE子句)。
以上是FROM 子句中的左連接與多個表:何時應該使用現代 SQL 語法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!