SQL |加入使用vs加入

时间:2017-08-06 11:52:22

标签: sql join

嗯,这可能只是一个&#34;问题&#34; 问题,但我真的想更多地了解JOIN t ON <equal condition>和{{之间的区别1}}。

当然,我假设这两个表具有相同的列,具有相同的名称和相同的数据类型。在这种情况下:

  • 两种语法之间是否有真正的差异?
  • 是所有(或至少是最重要的)dbms s 支持的JOIN t USING(<list of columns>)子句吗?

我已经阅读w3resource.com上的USING以及NATURAL JOINNATURAL JOIN条款相关的question但他们似乎没有回答前两个问题...... 此外,w3resource.com EQUI JOIN部分和INNER JOIN部分都未提及ON&#34;技术&#34;。

1 个答案:

答案 0 :(得分:5)

在大多数情况下,这是一个风格问题(事实上并非所有数据库都支持using)。有一个小的区别。如果你这样做:

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

然后col1在结果集中出现两次。如果你这样做:

select *
from t1 join
     t2
     using (col1)

然后col1只出现一次。

我喜欢的using的一个方面是它鼓励外键与主键具有相同的名称。如果可能的话(并不总是可行),我认为这是一个很好的设计,使数据库更容易使用。

在某些情况下,using 可能做出意想不到的事情。在join s的长链中,它没有指定密钥的来源。但是,我没有发现这在精心设计的数据库中存在问题。

另一方面,natural join是令人厌恶的,不应该被使用。它们不指定要连接的列。他们甚至不尊重外键关系。在比较的列上不清楚只是对代码中的错误的邀请 - 可能真的,真的很难找到的错误。