以下是否有任何显着差异?
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
SO用户是否优先选择其中一个?
前者是ANSI 89语法,后者是ANSI 92.
对于该特定查询,没有区别.但是,使用前者,您无法在复杂查询中将过滤器与连接条件分开,并且指定LEFT与RIGHT与INNER的语法通常会令人困惑,尤其是如果您必须在不同的数据库供应商之间来回切换.我根本不喜欢旧的语法.
与sql查询引擎没有区别。
为了可读性,如果使用换行符和缩进,后者会更容易阅读。
对于 INNER JOIN,如果将“过滤器”和“连接”放在 ON 或 WHERE 子句中并不重要,查询优化器应该决定首先执行什么操作(它可能选择先执行过滤,然后再执行连接,或者反之亦然)反之亦然
然而,对于 OUTER JOIN,存在差异,有时您需要将条件放在 ON 子句中,有时放在 WHERE 中。在 OUTER JOIN 的 WHERE 子句中放置一个条件可以将其转变为 INNER JOIN(因为 NULL 的工作原理)
例如,检查以下两个示例之间的可读性:
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
Run Code Online (Sandbox Code Playgroud)
与
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10820 次 |
| 最近记录: |