SQL | 加入使用vs加入

Bru*_*ngo 3 sql join

那么,这很可能只是一个“的风格问题”的问题,但我真的想了解多一点有关之间的差异JOIN t ON <equal condition>JOIN t USING(<list of columns>)

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

  • 两种语法之间有什么真正的区别?
  • USING子句中所有支持的(或至少是最重要的)DBMS 小号

我已经NATURAL JOINw3resource.com上阅读了有关vs 子句的以下问题,但它们似乎并未回答前两个问题...而且,w3resource.com的这一节和本节均未提及“技术”。NATURAL JOINONEQUI JOININNER JOINUSING

Gor*_*off 9

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

select *
from t1 join
     t2
     on t1.col1 = t2.col1
Run Code Online (Sandbox Code Playgroud)

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

select *
from t1 join
     t2
     using (col1)
Run Code Online (Sandbox Code Playgroud)

然后col1仅出现一次。

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

在某些情况下using 可能会发生意外的事情。在joins的长链中,它没有指定键的来源。但是,我认为在设计良好的数据库中这不是问题。

另一方面,natural joins是可憎的,永远不要使用。他们没有指定要连接的列。他们甚至不尊重外键关系。在要比较的列上不清楚,只是邀请代码中的错误-确实很难找到的错误。

  • @丹布拉库克。。。我不知道你为什么这么说。我在 Oracle (http://rextester.com/TQKP83377) 中使用了“using”。我在答案中遗漏了什么吗? (2认同)