以下是使用WHERE語法(其他明智的方法稱為隱式聯(lián)接)的問題:
首先,很容易獲得偶然的交叉連接,因為聯(lián)接條件不在表名旁邊。如果將6個表連接在一起,則很容易忽略WHERE子句中的一個表。通過使用DISTINCT關鍵字,您將經常看到這個問題。這對數(shù)據(jù)庫來說是一個巨大的性能打擊。使用顯式聯(lián)接語法不能意外地獲得交叉連接,因為它將不通過語法檢查。
在某些數(shù)據(jù)庫中,在舊的語法中,向右和向左聯(lián)接是有問題的(在SQL Server中,不能保證得到正確的結果)。此外,我所知道的SQL Server中也不推薦它們。
如果您打算使用交叉聯(lián)接,則舊語法不清楚這一點。顯然,使用目前的ANSII標準。
對于維護者來說,更難看出哪些字段是聯(lián)接的一部分,甚至是哪些表使用隱式語法以何種順序連接在一起。這意味著修改查詢可能需要更多時間。我認識的人很少,一旦他們花時間對顯式聯(lián)接語法感到舒服,就會回到原來的方式。
我還注意到,一些使用這些隱式聯(lián)接的人實際上并不了解聯(lián)接是如何工作的,因此在他們的查詢中得到了不正確的結果。
老實說,你是否會使用18年前被一種更好的方法取代的其他類型的代碼呢?