做这些方式之一的优点还是缺点

时间:2010-07-29 15:53:18

标签: sql mysql

我看到有些人像这样加入

SELECT * FROM table1
JOIN table 2
ON table1_id = table2_id

有些人这样做

SELECT * 
FROM table1 
WHERE table1.table1_id = tabl2.table2_id;

什么是差异,什么是更有效和更有益的

6 个答案:

答案 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)

完全没有区别。这是相同的查询。 (第一个查询就像“老派”,对于那些记得联合声明根本不存在的人来说,第二个查询就像'新学校',谁不能想象如何加入将没有非必要的单词:)。这是一个笑话)