2017-08-06 108 views
0

那麼,這很可能只是一個問題「的風格問題」,但我真的想了解更多一點關於JOIN t ON <equal condition>JOIN t USING(<list of columns>)之間的差異。SQL | JOIN使用VS JOIN ON

當然,我假設兩個表具有相同的列,具有相同的名稱和相同的數據類型。在這種情況下:

  • 有兩種語法之間的任何真正區別?
  • 是所有(或至少最重要的)dbms支持的USING子句s

我已經閱讀w3resource.com關於NATURAL JOIN及以下questionNATURAL JOIN VS ON條款,但他們似乎並沒有回答前兩個問題... 此外,無論是w3resource.com EQUI JOIN部分也不INNER JOIN節請提及USING「技術」。

回答

1

在大多數情況下,這是一個風格問題(並不是所有的數據庫都支持using)。有一個小小的差異。如果你這樣做:

select * 
from t1 join 
    t2 
    on t1.col1 = t2.col1 

然後col1在結果集中出現兩次。如果你這樣做:

select * 
from t1 join 
    t2 
    using (col1) 

然後col1只出現一次。

我喜歡的using的一個方面是它鼓勵外鍵與主鍵具有相同的名稱。如果這是可能的(並不總是可能的),我認爲這是一個很好的設計,使數據庫更易於使用。

在有些情況下using可以做意想不到的事情的情況。在join的長鏈中,它沒有指定密鑰來自哪裏。但是,我不認爲這是設計良好的數據庫中的問題。

另一方面,natural join是憎惡,不應該使用。他們不指定要連接的列。他們甚至不尊重外鍵關係。不清楚被比較的列只是對代碼中的錯誤的邀請 - 錯誤可能真的很難找到。

+0

其實,我相信在oracle中,你的第二個查詢會崩潰。 –

+0

@DanBracuk。 。 。我不知道你爲什麼這麼說。我在Oracle上使用過'使用'(http://rextester.com/TQKP83377)。我在答案中遺漏了什麼? –