Whether to use JOIN or not?
Possible Duplicate:
INNER JOIN versus WHERE clause — any difference?
SQL JOIN: is there a difference between USING, ON or WHERE?
号
例如,我有一个SQL声明:
1 2 3
| SELECT *
FROM orders, inventory
WHERE orders.product = inventory.product |
或
1 2 3 4
| SELECT *
FROM orders
JOIN inventory
ON orders.product = inventory.product |
号
这两者有什么区别?
- 使用,显示的是一个盲目跟随的人——一个复制了他们所展示的内容,但没有充分发展自己来找出他们不应该使用它的原因的人。问好:)
它们的作用完全相同,但我建议使用第二种方法来提高可读性和可维护性。
使用JOIN可以将定义表之间关系的条件与结果集过滤器的条件分开。
使用JOIN可以更容易地查看是否缺少联接条件。
使用JOIN可以方便地在INNER或OUTER JOIN之间进行选择。逗号语法相当于INNER JOIN(尽管有些数据库在使用第一种方法时有一个扩展来允许外部联接)。
最重要的是要对你使用的内容保持一致。逗号语法与JOIN关键字的优先级不同,如果试图在同一查询中混合两个语法,则可能导致混淆错误。由于第3点的原因,如果始终使用JOIN,则更容易保持一致。
- 第3点和第4点很重要。隐含连接(在其中)更容易混淆。stackoverflow.com/questions/5654278/…
- 隐式连接区SQL反模式,没有理由永远使用一个。
- 谢谢,先生
内部联接是ANSI语法,应该是首选方法。
想象一下,如果将,与say many表一起使用,这个解决方案会变得多么难看?埃多克斯1〔15〕
善待您未来的开发人员,以及任何关注或维护此代码的人,使用JOIN语法。
- 两者都是ANSI语法。显式联接是用sql92添加的。隐式联接是SQL89
逗号(,相当于CROSS JOIN。使用一个明确的CROSS JOIN是更直观和推荐的,因为它可以很容易地更改为LEFT JOIN、RIGHT JOIN等。使用CROSS JOIN也是符合ANSI的。
- -1-逗号相当于CROSS JOIN,但通过WHERE子句中的筛选器,可以将其设置为INNER JOIN。
- @谢谢你的更正,我已经编辑好了。
它们在功能上是等效的。第二个是"更新的"。
- 第二种方法比"更新"(我们的意思是说它是近20年前出现的),更不容易出错,而且随着时间的推移更容易维护,尤其是当事情变得复杂时。第一种是不应该使用的语法。
- 两个都是在4年内被引进的——大约20年前……它们在功能上是等效的。你随时都可以下马。