是否有任何显着差别以下?

SELECT a.name, b.name FROM a, b WHERE a.id = b.id AND a.id = 1

SELECT a.name, b.name FROM a INNER JOIN b ON a.id = b.id WHERE a.id = 1

这样做的用户有优先选择的一个过其他的?

有帮助吗?

解决方案

有什么区别,但第二的可读性更好,当你有一个大的多连接查询有额外的where子句进行筛选。结果 分离连接子句和过滤器子句是件好事:)

其他提示

前者是ANSI 89语法,后者是ANSI 92。

有关的该特定查询没有差别。然而,与前你失去了一个过滤器在复杂查询的连接条件分离的能力,并指定LEFT VS RIGHT VS INNER往往是混乱的语法,特别是如果你要来回走不同的数据库厂商之间。我不喜欢旧的语法都没有。

有是将SQL查询引擎没有差别。

有关可读性,后者是容易得多,如果您使用换行符和缩进阅读。

有关内部连接,如果你把“过滤器”不要紧并在“连接”或WHERE子句,查询优化器应该决定先做什么反正(它可能会选择先做一个过滤器,随后加入,或者反之亦然

然而对于外连接,是有差别的,有时你会希望把条件ON子句中,有时在WHERE。把一个条件WHERE子句中用于外连接可以把它变成一个INNER JOIN(由于空值是如何工作的)

例如,检查以下两个样本之间的可读性:

SELECT c.customer_no, o.order_no, a.article_no, r.price
FROM customer c, order o, orderrow r, article a
WHERE o.customer_id = c.customer_id
AND r.order_id = o.order_id
AND a.article_id = r.article_id
AND o.orderdate >= '2003-01-01'
AND o.orderdate < '2004-01-01'
AND c.customer_name LIKE 'A%'
ORDER BY r.price DESC 

VS

SELECT c.customer_no, o.order_no, a.article_no, r.price
FROM customer c 
INNER JOIN order o
   ON  o.customer_id = c.customer_id
   AND o.orderdate >= '2003-01-01'
   AND o.orderdate < '2004-01-01'
INNER JOIN orderrow r
   ON  r.order_id = o.order_id
INNER JOIN article a 
   ON  a.article_id = r.article_id
WHERE  c.customer_name LIKE 'A%'
ORDER BY r.price DESC 

虽然可以执行大多数任务使用,并在你的情况下,没有任何差别,我会总是使用第二,在所有的时间。

  1. 这是目前支持的标准
  2. 它让加入的从句和过滤器在其中的条款
  3. 它使得更加复杂的左,右,完全外部联接容易得多
  4. MSSQL帮助是所有围绕该法因此更容易得到的帮助你的问题查询

虽然在技术上是没有什么区别,你需要格外小心做使用第一种方法连接。如果你弄错了意外,你可能最终做了笛卡尔的a和b表(一个很长的,内存和CPU密集型查询之间的连接 - 这将在各单行匹配b中的所有行坏,如果一个。和b是大表与开始)。使用一个明确的INNER JOIN是更安全和更容易阅读。

没有差异。我发现第一格式更易读,并使用所述第二格式做其他类型的只有当连接(OUTER,左内等)。

第二种形式是SQL92兼容的语法。这应该意味着它是当前和未来所有的数据库厂商的支持。然而,事实是,第一种形式是如此普遍,它也保证是各地的时间比我们不在乎。

否则,它们是在数据库如何对待两个各方面都相同。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top