SQL Server - 缺少NATURAL JOIN / x JOIN y USING(字段)

时间:2010-07-18 22:53:02

标签: sql sql-server tsql

我刚刚阅读了自然连接/使用 - SQL92的功能,这些功能(遗憾地?)缺少SQL Server当前的功能。

有没有人来自支持SQL Server(或其他不支持的DBMS)的DBMS - 它们听起来有用,还是一堆蠕虫(听起来也可能!)?

5 个答案:

答案 0 :(得分:15)

我从不使用NATURAL JOIN,因为我不喜欢连接可能会做一些我不想做的事情,因为两个表中都存在一些列名。

偶尔会使用USING连接语法,但事实证明我需要一个比USING更加复杂的连接条件,因此我将其转换为等效的{{1毕竟语法。

答案 1 :(得分:8)

你会考虑一个真正关系的DBMS吗?

  教程D中的

[真正的关系   语言],唯一的“加入”运算符是   叫JOIN,意思是“自然的   加入“......应该没有别的   加入...很少有人拥有   使用正确的经验   关系语言。那些人   有,我强烈怀疑没有   他们曾经抱怨过一些人   在配对中感到不便   列根据其名称

来源:Hugh Darwen的“The Importance of Column Names

答案 2 :(得分:2)

相关问题:is NATURAL JOIN any better than SELECT FROM WHERE in terms of performance ?

自然联接不是一个方便的捷径:它是彻头彻尾的危险。这在DBMS中非常罕见。

USING是明确的,但考虑到它的局限性,你无法在任何地方使用它,所以ON会保持一致,不是吗?

答案 3 :(得分:2)

这是方便的问题。 不是必不可少的,但它应该有它的位置,例如在交互式查询中(每次击键都让我们更接近RSI),或者甚至在生产代码中的一些简单的手写SQL案例< / em>(是的,我写过。甚至在严肃的代码中看过JOIN USING,由我自己以外的明智的程序员编写。但是,我喜欢离题了。

我在找到SS缺少此功能的确认时发现了这个问题,我得到了它。我只是对这种语法的仇恨感到困惑,我将其归因于酸葡萄综合症。当用一种光顾的语气演讲时我感到很开心 Sweets (读:语法糖)对你的健康有害。无论如何,你根本不需要它。

JOIN USING语法中的好处是,它不仅适用于列名称,还适用于列别名,例如:

-- foreign key "order".customerId references (customer.id)
SELECT c.*, c.id as customerId, o.* from customer c 
join "order" o using (customerId);

我不同意&#34;加入使用会更好,如果只是(...)&#34; 。或者说,你可能需要更复杂的条件。从不同的角度来看,为什么要使用JOIN ON?为什么不是纯粹的,并将所有条件移到WHERE子句?

SELECT t1.*, t2.* from t1, t2 where t2.t1_id = t1.id;

我现在可以生气并争辩说,这是如何表达联接的最简洁方式,你可以立即开始在where子句中添加更多条件,无论如何你通常需要这样做,等等等等......

所以你不应该错过这种特殊的语法,但没有什么可以为没有它而感到高兴(&#34; Phew,那很接近。那么好不要加入了我。我没有多少痛苦&#34; )。

因此,虽然我个人在99%的时间内使用JOIN ON,但在没有JOIN USINGNATURAL JOIN的情况下,我觉得没有Schadenfreude。

答案 4 :(得分:1)

我没有看到USING或NATURAL语法的价值 - 正如您所遇到的那样,只有ON始终如一,因此从可移植性的角度来看,它是最好的。

明确表示维护也更好,除了替代方案可能太有限而无法处理情况。我也希望我的代码库保持一致。