mysql SELECT“FROM t1,t2” - 或 - “FROM t1 JOIN t2 ON”

时间:2012-04-18 18:44:24

标签: mysql select join

这些查询之间有什么不同?我应该选择哪一个?为什么?

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 JOINS具有相同的效果吗?

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

4 个答案:

答案 0 :(得分:0)

查询是相同的,第一个只是第二个的简写语法。 LEFT JOIN完全不同。

INNER JOIN仅显示两个表共有的记录。 LEFT JOIN获取左表中的所有记录,并将其与右表中的记录进行匹配。如果右表中的记录不匹配,则会在其位置选择NULL

答案 1 :(得分:0)

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

答案 2 :(得分:0)

内连接是左连接,跳过空(null)导致第二个表。

当使用where子句完成所有操作时,

查询优化器有更多的可能性。一些rdbms不支持自然连接和其他连接等命令,因此使用“where”是人们可以真正依赖的东西。

答案 3 :(得分:0)

第一个查询称为笛卡尔查询,通常在大型数据库中提供所需的结果。

相反,使用连接将产生您想要的结果。