2017-08-06 105 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)。我在答案中遗漏了什么? –