我看到有些人像这样加入
SELECT * FROM table1
JOIN table 2
ON table1_id = table2_id
有些人这样做
SELECT *
FROM table1
WHERE table1.table1_id = tabl2.table2_id;
什么是差异,什么是更有效和更有益的
答案 0 :(得分:3)
避免隐式连接的一个原因是很容易弄错它们并获得意外的交叉连接。如果您需要使用外部连接而不是内部连接,也可能会遇到很多问题。此外,许多使用implict加入的人都不会知道联接的内容,因此通常会创建看似有效但不正确的查询。由于彻底了解连接是任何编写SQL代码的人的要求,因此使用一种语法可以帮助您避免学习成功所需的基础知识,这是非常愚蠢的。
当你打算使用交叉连接时,维护代码的人不知道这是你的意图,还是你的错误,因为偶然的交叉连接在语法很差的情况下很常见
隐式连接语法已经过时了近二十年,为什么你会考虑使用它呢?
答案 1 :(得分:2)
隐式连接(第二个例子)被许多人认为是不好的风格,可能会误导你或其他程序员。写连接(第一个例子)更明确。
在效率方面,它可能无关紧要,因为您的SQL优化器将以相同的方式执行这两个查询。
答案 2 :(得分:1)
€: 发现了这个: http://ibmsystemsmag.blogs.com/db2utor/2008/04/performance-com.html
本练习中的数字表明,使用INNER JOIN而非IMPLICIT JOIN语法不会提高性能。这可能是DB2 V4或V5中的情况,但正如您所看到的,优化器变得非常智能,并且会将语句重写为最佳格式以实现良好性能。
答案 3 :(得分:1)
前者(显式连接)明显区分用于连接表的条件和应用于整个记录集的条件,而后者(隐式连接)则不然。另外,我不知道mysql是否允许使用隐式连接语法进行外连接 - 我相信有些SQL会这样做,有些则不行。
结果:显式连接更清晰,因此应该更容易维护;隐式连接不那么冗长。
答案 4 :(得分:1)
这就是为什么
SELECT * FROM table1
INNER JOIN table 2
ON table1_id = table2_id
SELECT * FROM table1
LEFT JOIN table 2
ON table1_id = table2_id
SELECT * FROM table1
RIGHT JOIN table 2
ON table1_id = table2_id
SELECT * FROM table1
FULL OUTER JOIN table 2
ON table1_id = table2_id
答案 5 :(得分:-5)
完全没有区别。这是相同的查询。 (第一个查询就像“老派”,对于那些记得联合声明根本不存在的人来说,第二个查询就像'新学校',谁不能想象如何加入将没有非必要的单词:)。这是一个笑话)