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