这些查询之间有什么不同?我应该选择哪一个?为什么?
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版本中的一些版本。 ;)
答案 0 :(得分:0)
查询是相同的,第一个只是第二个的简写语法。 LEFT JOIN
完全不同。
INNER JOIN
仅显示两个表共有的记录。 LEFT JOIN
获取左表中的所有记录,并将其与右表中的记录进行匹配。如果右表中的记录不匹配,则会在其位置选择NULL
。
答案 1 :(得分:0)
“逗号”语法等同于INNER JOIN语法。无论您如何要求,查询优化器都应该为您运行相同的查询。一般建议使用JOIN语言进行连接,并使用WHERE语言进行过滤,因为它可以使您的意图更加清晰
答案 2 :(得分:0)
内连接是左连接,跳过空(null)导致第二个表。
当使用where子句完成所有操作时,查询优化器有更多的可能性。一些rdbms不支持自然连接和其他连接等命令,因此使用“where”是人们可以真正依赖的东西。
答案 3 :(得分:0)
第一个查询称为笛卡尔查询,通常在大型数据库中提供所需的结果。
相反,使用连接将产生您想要的结果。