2012-04-18 101 views
0

这个查询有什么不同?我应该选择哪一个,为什么?mysql SELECT“FROM t1,t2” - 或者 - “FROM t1 JOIN t2 ON”

SELECT 
t1.*, 
t2.x 
FROM 
t1, 
t2 
WHERE 
t2.`id` = t1.`id` 

SELECT 
t1.*, 
t2.x 
FROM 
t1 
INNER JOIN             # LEFT JOIN ? 
t2 
ON t2.`id` = t1.`id` 

是否使用逗号已超过使用LEFT加入同样的效果?

这很尴尬。这是多年来我第一次问自己这个问题。我曾经使用过第一个版本,但现在我感觉我错过了我第一次SQL归纳中的一些行。 ;)

+0

[INNER JOIN ON vs WHERE子句]的可能重复(http://stackoverflow.com/questions/1018822/inner-join-on-vs-where-clause) – 2012-04-18 18:49:19

回答

0

“逗号”语法等同于INNER JOIN语法。查询优化器应该为您运行相同的查询,无论您如何要求它。有一个一般建议,使用JOIN语言进行连接,并使用WHERE语言进行筛选,因为它可以使您的打算更加清晰

0

查询是一样的,第一个只是第二个短语句法。 LEFT JOIN是完全不同的东西。

INNER JOIN只显示两个表的共同记录。 LEFT JOIN从左表中获取所有记录并将其与右表中的记录匹配。如果右表中没有记录匹配,则会选择NULL替代。

0

内部连接是在第二个表中跳过空(空)结果的左连接。

当使用where子句完成所有事情时,查询优化器有更多的可能性。一些rdbms不支持像自然连接和其他连接这样的命令,所以使用“where”是一个真正可以依赖的东西。

0

第一个查询称为cartisian查询,通常在大型数据库中提供不想要的结果。

取而代之的是使用连接会产生你想要的。

相关问题