其联接语法是更好?其联接语法是更好?(Which join syntax is better?)

2019-06-14 09:11发布

因此,我们要迁移从Informix到SQL Server。 而且我注意到,在Informix中查询被写入以这种方式:

select [col1],[col2],[col3],[col4],[col5]
from tableA, tableB
where tableA.[col1] = table.[gustavs_custom_chrome_id]

而我写的SQL Server中的所有查询都写为:

select [col1],[col2],[col3],[col4],[col5]
from tableA 
inner join tableB on tableA.[col1] = table.[gustavs_custom_chrome_id]

现在,我的第一个念头是:首先查询是坏的。 这可能造成使用WHERE子句设置,那么这个巨大的纪录whittles实际记录集。 因此,这是不好的性能。 而且它的非ANSI。 因此,这双坏。

然而,一些谷歌上搜索后,似乎他们都是在理论上几乎相同。 他们都是符合ANSI标准。

所以我的问题是:

  1. 难道这两个查询执行相同? IE浏览器。 运行一样快,总是给出了相同的答案。
  2. 都是真的符合ANSI标准?
  3. 有没有我为什么要对另一推动一个风格突出的任何原因? 或者我应该留下足够好的人吗?


    注:以上只是查询的示例。 我已经看到了(第一类)某些查询同时加入最多5台。

Answer 1:

那么,“更好”是主观的。 这里有一些风格。 但我会直接解决您的问题。

  1. 无论执行相同
  2. 两者都是符合ANSI标准。
  3. 与第一实施例的问题在于

    • 这是很容易在不经意间获得的叉积(因为它是容易留下了连接标准)

    • 它也变得困难,因为你添加越来越多的表的加入调试连接标准

    • 因为旧式外连接(* =)语法已被弃用( 已早有记载返回不正确的结果 ),当你需要引入外部连接,你需要混合新的风格和旧式联接...为什么要推广不一致?

    • 虽然它不是完全的最佳实践的权威, Microsoft建议明确INNER / OUTER JOIN语法

    • 用后者的方法:

      • 您正在使用无论内/外的一致联接语法
      • 它是更严厉的(不是不可能)不小心导出叉积
      • 隔离过滤标准连接标准可以使调试更容易

我写的帖子凯文指出 。



文章来源: Which join syntax is better?