SQL - JOIN的好处?

时间:2010-11-29 15:58:58

标签: sql tsql

  

可能重复:
  Is there something wrong with joins that don't use the JOIN keyword in SQL or MySQL?

您好,

我总是在没有加入的情况下检索数据......

但是一种方法比另一种方法有好处吗?

select * from a INNER JOIN b on a.a = b.b;

select a.*,b.*  from a,b where a.a = b.b;

谢谢!

6 个答案:

答案 0 :(得分:8)

使用INNER JOIN关键字的第一种方法是:

  • ANSI SQL标准
  • 更干净,更富有表现力

因此,当我看到第二个选项时,我总是畏缩 - 它只是膨胀了你的WHERE子句,你无法一眼就看出这些表是如何连接的(在哪些字段上)。 / p>

如果您忘记了很长的WHERE子句表达式中的JOIN条件之一,您会突然得到一个混乱的笛卡尔积...使用INNER JOIN关键字无法做到这一点(必须表达要加入的字段。

答案 1 :(得分:2)

我认为最大的好处是可读性。具有明确命名的连接类型的版本对我来说更容易理解。

答案 2 :(得分:1)

基本上,您正在为JOIN使用不同的语法。作为最佳实践的问题,最好使用第一种语法(显式JOIN),因为它更清楚查询的意图是什么,并使代码更容易维护。

答案 3 :(得分:0)

您始终使用联接检索数据。第二个查询使用旧语法,但在后台它仍然是连接:)

答案 4 :(得分:0)

这取决于RDBMS,但在SQL服务器的情况下,我理解利用前一种语法可以实现更好的优化。这不是一个SQL问题,而是一个特定于供应商的问题。

您还可以使用EXPLAIN(SQL Server:Query Execution Plan)类型函数来帮助您了解是否存在差异。每个查询都是唯一的,我想存储的统计信息可以(并将会)改变行为。

答案 5 :(得分:0)

这些都是联接。它们只是连接的两种不同的语法表示。第一个(使用“Join”关键字,是当前的ANSI标准(我认为是1992年)。

仅内连接的情况下,两个不同的表示在功能上是相同的,但是后一种ANSI SQL92标准语法在你习惯它之后可以读得很多,因为每个单独的连接条件与连接在一起的中间结果集对相关联。在旧表示中,连接条件与where子句中的整体查询的过滤条件一起,并且不清楚哪个是哪个。这使得识别不良连接条件(例如,将生成非预期的笛卡尔积)变得更加困难。

但更重要的是,在执行 外部 加入时,在某些情况下,旧语法不是等效的,实际上会生成< strong> 错误 结果集。

您应该转换为所有查询的较新语法。